【发布时间】:2019-08-28 16:31:57
【问题描述】:
我正在解析一些 JSON 以将存储的数据读入自定义对象。我已经简单地使用 dart:convert 中的 jsonDecode 实现了这一点,并在我的每个自定义对象上编写了 fromJson() 构造函数方法。它们是嵌套的——所以TopicList 对象具有List<Topic> 的属性。我已经在TopicList 和Topic 上编写了fromJson() 构造函数,并且我正在尝试使用map 获取解码的JSON 字符串并从中创建一个对象。但它失败了,因为 map 返回的列表类型错误,尽管它是从构造方法创建的。
class TopicList {
List<Topic> topics;
TopicList() {}
TopicList.fromJson(String jsonTopicList) {
Map decoded = jsonDecode(jsonTopicList);
// this *doesn't* work
topics = decoded['topics'].map((t) => Topic.fromJson(t)).toList();
// this does work
topics = [];
for (Map<String,dynamic> t in decoded['topics']) {
Topic newT = Topic.fromJson(t);
topics.add(newT);
}
}
}
class Topic {
String topic;
Topic({this.topic});
Topic.fromJson(Map<String, dynamic> t) {
this.topic = t['topic'];
}
}
当我尝试/捕获map 方法时,它告诉我map().toList() 调用返回的是List<dynamic> 而不是List<Topic>。
现实比这更复杂,具有更高级别(属于Topic 的其他对象的另一个List)和其他属性。但这是正在发生的事情的核心。
我对解决方法不感兴趣 - 我有其中一种,它在上面的代码中工作。但我想了解为什么看似对象的构造函数(在本例中为 Topic.fromJson())返回的是动态对象而不是 Topic。
【问题讨论】: