如何将 List<dynamic> 从 JSON 传递到 List<MyModel>?

How to pass a List<dynamic> to a List<MyModel> from a JSON?

我有一个从 API 检索数据的应用程序,我以列表的形式接收数据,当我打印它时,我可以看到数据正常。

[
  {
    "1": "MaxMilyin",
    "2": "409733",
    "3": "1130794"
  },
  {
    "1": "HippopotamusRex",
    "2": "346742",
    "3": "1204932"
  },
  ...
]

当我尝试将列表传递到我的模型列表时,我只得到:

   [Instance of 'TopTenUsersModel', Instance of 'TopTenUsersModel', ...]

这是我的模型 class,我用这个 site 生成了 class:

class TopTenUsersModel {

  String s1;
  String s2;
  String s3;

  TopTenUsersModel({this.s1, this.s2, this.s3});

  TopTenUsersModel.fromJson(Map<String, dynamic> json) {
    s1 = json['1'];
    s2 = json['2'];
    s3 = json['3'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['1'] = this.s1;
    data['2'] = this.s2;
    data['3'] = this.s3;
    return data;
  }
}

这是我return数据作为模型的方法。

static Future<List<TopTenUsersModel>> getTopTenUsers() async{

    try{

      print("INICIANDO CONEXÃO COM A API...");

      var response = await client.get(
        Constants.BASE_URL + Constants.getTopTenUsers + Constants.AUTH
      );

      //print("PRINT RESPONSE NETWORK UTIL: ${response.body}");

      // Here I can see the data ok!

      List<dynamic> list = json.decode(response.body) as List;

      // Here I get 'Instance of 'TopTenUsersModel''

      return (json.decode(response.body) as List)
          .map((item) => TopTenUsersModel.fromJson(item))
          .toList();

    } on SocketException catch (e){
        throw (e.message);
    } finally {
      client.close();
    }
  }

您应该通过以下方式实施

型号class

  class TopTenUsersModelResponse {
  final List<TopTenUsersModel> list;

  TopTenUsersModelResponse({
    this.list,
  });

  factory TopTenUsersModelResponse.fromJson(List<dynamic> parsedJson) {
    List<TopTenUsersModel> list = new List<TopTenUsersModel>();
    list = parsedJson.map((i) => TopTenUsersModel.fromJson(i)).toList();

    return new TopTenUsersModelResponse(list: list);
  }
}

替换

 List<dynamic> list = json.decode(response.body) as List;

      // Here I get 'Instance of 'TopTenUsersModel''

      return (json.decode(response.body) as List)
          .map((item) => TopTenUsersModel.fromJson(item))
          .toList();

来自

final List parsed = json.decode(response.body);
List<TopTenUsersModel> responseModelList = new TopTenUsersModelResponse.fromJson(parsed).list;