在dart中使用JSON.decode()从JSON字符串实例化类
通过浏览,我成功地创建了一个类,该类可以通过公开在dart中使用JSON.decode()从JSON字符串实例化类,json,dart,angular-dart,Json,Dart,Angular Dart,通过浏览,我成功地创建了一个类,该类可以通过公开Map toJson()方法“opt-in”dat:convert,并可以通过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
Map toJson()
方法“opt-in”dat:convert
,并可以通过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)
但到目前为止我还没找到办法。
我知道我可以为我的类构建一个构造函数,从映射中初始化它,比如:
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.decode
,看起来(这只是我的意见)调用toJson()更好
明确地说,因为如果抛出异常,它不会出现在stacktrace中(我不知道为什么)。嗯,我当然可以,但我的问题更多的是知道为什么我可以通过公开JSON()而不是反过来选择JSON.encode()。