Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在dart中使用JSON.decode()从JSON字符串实例化类_Json_Dart_Angular Dart - Fatal编程技术网

在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()。