Class Dart:基于JSON响应创建动态类
我需要创建一个具有动态字段的类,该字段取决于API返回的内容 我使用的是定制的RESTAPI,它返回的数据在所有情况下都不具有相同的字段数。到目前为止,我一直在使用一个带有工厂构造函数的类来根据响应创建对象,如下所示:Class Dart:基于JSON响应创建动态类,class,flutter,dart,Class,Flutter,Dart,我需要创建一个具有动态字段的类,该字段取决于API返回的内容 我使用的是定制的RESTAPI,它返回的数据在所有情况下都不具有相同的字段数。到目前为止,我一直在使用一个带有工厂构造函数的类来根据响应创建对象,如下所示: class MyClass { dynamic field1; dynamic field2; dynamic field3; dynamic field4; MyClass({ this.field1, this.field2, t
class MyClass {
dynamic field1;
dynamic field2;
dynamic field3;
dynamic field4;
MyClass({
this.field1,
this.field2,
this.field3,
this.field4,
});
factory MyClass.fromJson(dynamic json) {
return MyClass(
field1: json['field1'],
field2: json['field2'],
field3: json['field3'],
field4: json['field4'],
);
}
}
如果响应为:
{
"field1": 123,
"field2": 432,
"field3": 213,
"field4": 331
}
但这并不适用于所有情况,因为有些响应包含少于或多于4个字段
它可以是:
{
"field1": 123,
"field2": 432,
"field3": 213
}
或
我如何创建一个动态类来检查有多少字段,并在运行时创建它自己?好吧,到目前为止,在Dart中还无法实现您的要求。您可以做的是:
class MyClass {
final Map<dynamic, dynamic> data;
MyClass(this.data);
factory MyClass.fromJson(dynamic json) {
assert(json is Map);
return MyClass(json['data']);
}
}
void main() {
// Let's say this is your json
final json = {
'data': {
'field1': 1,
'field2': 2.2,
},
};
// Create your MyClass instance
var myClass = MyClass.fromJson(json);
// Get the values
var field1 = myClass.data['field1']; // prints 1
var field2 = myClass.data['field2']; // prints 2.2
}
class-MyClass{
最终地图数据;
MyClass(this.data);
工厂MyClass.fromJson(动态json){
断言(json是映射);
返回MyClass(json['data']);
}
}
void main(){
//假设这是您的json
最终json={
“数据”:{
“字段1”:1,
“字段2”:2.2,
},
};
//创建MyClass实例
var myClass=myClass.fromJson(json);
//获取值
var field1=myClass.data['field1'];//打印1
var field2=myClass.data['field2'];//打印2.2
}
将字段保存在列表中
或Map
中(如果字段数量是动态的)。我知道这是一种方法,但不是寻找它。我需要易于访问属性的对象。我在寻找类似java中反射的东西。类的目的是有一个定义好的接口,可以在其他类或方法中使用。但是,如果您的类是在运行时动态构建的,并且具有动态数量的方法。那么,您将如何在编程中使用这个类?你能举一个例子说明你希望它如何在伪代码中工作吗?非常感谢,它很有帮助。
class MyClass {
final Map<dynamic, dynamic> data;
MyClass(this.data);
factory MyClass.fromJson(dynamic json) {
assert(json is Map);
return MyClass(json['data']);
}
}
void main() {
// Let's say this is your json
final json = {
'data': {
'field1': 1,
'field2': 2.2,
},
};
// Create your MyClass instance
var myClass = MyClass.fromJson(json);
// Get the values
var field1 = myClass.data['field1']; // prints 1
var field2 = myClass.data['field2']; // prints 2.2
}