通过浏览,我确实成功地创建了一个可以“选择加入”的类 dat:convert
通过暴露一个 Map toJson()
方法并且可以使用 JSON.encode(myClass)
进行 json 化,或多或少类似于以下内容:
//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)
但到目前为止,我还没有找到办法。
我知道我可以为我的类构建一个从 map 初始化它的构造函数,例如:
String jsonString = '{"p1":"value","p2":"value"}'
MyClass instance = MyClass.fromMap(JSON.decode(jsonString))
然而,我正在寻找一种更“对称”的方式,只使用 JSON.encode() 和 JSON.decode(),它是否可行?我错过了什么吗?
最佳答案
没有用 JSON 对类进行编码的标准方法。 {"p1":"value","p2":"value"}
不包含有关要实例化的类的任何信息。也没有从 as 字符串创建新类的标准方法(当几个包含同名类时应该使用什么库,......
据我所知,复活者可以用于这个目的
reviver(var key, var value) {
// decode manually
}
final jsonDecoder = new JsonDecoder(reviver);
但是复活者需要一些硬编码的逻辑来识别什么 JSON 应该导致什么 Dart 类,以及它应该如何实例化它并从 JSON 初始化属性。
关于json - 在 dart 中使用 JSON.decode() 从 json 字符串实例化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39772149/