【发布时间】:2020-08-25 23:32:47
【问题描述】:
能否请您帮忙并展示如何序列化和反序列化包含对象映射到/从 dart 中的 json 的类?
这是一个简单数据类的示例:
class SimpleData {
int _blah;
String _str;
SimpleData([this._blah, this._str]);
SimpleData.fromJson(Map<String, dynamic> json) {
_blah = json['b'];
_str = json['s'];
}
Map<String, dynamic> toJson() => {
'b' : _blah,
's' : _str,
};
}
下面是SimpleData 在地图中的使用方式:
class MapTest {
Map<String, SimpleData> _mapHell = Map<String, SimpleData>();
MapTest() {
_mapHell['1'] = SimpleData(42, "Astfgl");
_mapHell['666'] = SimpleData(1234, "Vassenego");
}
MapTest.fromJson(Map<String, dynamic> json) {
_mapHell = jsonDecode(json['coworkers']);
}
Map<String, dynamic> toJson() => {
'coworkers' : jsonEncode(_mapHell),
};
}
调用:print(mapTestInstance.toJson().toString()); 将输出:
{coworkers: {"1":{"b":42,"s":"Astfgl"},"666":{"b":1234,"s":"Vassenego"}}}
尝试反序列化失败,因为coworkers 应该被"" 包围。错误信息如下:
I/flutter (10196): Unexpected character (at character 2)
I/flutter (10196): {coworkers: {"1":{"b":42,"s":"Astfgl"},"666":{"b":1234,"s":"Vassenego"}}}
现在的问题是,上面的代码有什么问题?又该如何解决?
奇怪的是,在 Dart/Flutter 中使用 json 非常麻烦,因此非常感谢您的帮助。
【问题讨论】:
-
这不是答案,而是建议:使用已经存在的 Json Serializable 包而不是手动解析 Json,也可以看到 freezed 也很好:pub.dev/packages/freezedpub.dev/packages/json_serializable
-
感谢您的建议。我只是看了一下 json_serializable ,从描述中它似乎可以做到,但是你应该如何使用它呢?文档完全没有意义,所以我会坚持手动编码...