在dart中使用JSON.decode()从json字符串

时间:2016-09-29 13:48:07

标签: json dart angular-dart

通过浏览,我成功设法创建了一个可以通过公开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(),它有点可行吗?我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

在JSON中没有标准的方法来编码类。 {"p1":"value","p2":"value"}不包含有关要实例化的类的任何信息。还没有标准方法可以从字符串创建新类(当多个库包含具有相同名称的类时,应该使用哪个库,...

据我所知,复活可以用于此目的

reviver(var key, var value) {
  // decode manually
}
final jsonDecoder = new JsonDecoder(reviver);

但是reviver需要有一些硬编码逻辑,如何识别什么JSON应该导致什么Dart类以及它应该如何实例化它并从JSON初始化属性。