Class Dart:基于JSON响应创建动态类

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

我需要创建一个具有动态字段的类,该字段取决于API返回的内容

我使用的是定制的RESTAPI,它返回的数据在所有情况下都不具有相同的字段数。到目前为止,我一直在使用一个带有工厂构造函数的类来根据响应创建对象,如下所示:

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
}