通过浏览,我成功设法创建了一个可以通过公开dat:convert
方法“选择加入”Map toJson()
的类,并且可以与JSON.encode(myClass)
进行json-ified,或多或少如下:
//My dummy class
class MyClass{
String p1;
String p2;
Map toJson{
return {
'p1':this.p1,
'p2':this.p2
}
}
}
//so I can do
String jsonString = JSON.encode(myClass)
然而,即使反过来我也想这样做,例如:
String jsonString = '{"p1":"value","p2":"value"}'
MyClass instance = JSON.decode(jsonString)
但到目前为止,我找不到方法。 我知道我可以为我的类构建一个构造函数,从地图初始化它,如:
String jsonString = '{"p1":"value","p2":"value"}'
MyClass instance = MyClass.fromMap(JSON.decode(jsonString))
然而,我一直在寻找一种更加“对称”的方式,只使用JSON.encode()和JSON.decode(),它有点可行吗?我错过了什么吗?
答案 0 :(得分:1)
在JSON中没有标准的方法来编码类。 {"p1":"value","p2":"value"}
不包含有关要实例化的类的任何信息。还没有标准方法可以从字符串创建新类(当多个库包含具有相同名称的类时,应该使用哪个库,...
据我所知,复活可以用于此目的
reviver(var key, var value) {
// decode manually
}
final jsonDecoder = new JsonDecoder(reviver);
但是reviver需要有一些硬编码逻辑,如何识别什么JSON应该导致什么Dart类以及它应该如何实例化它并从JSON初始化属性。