json - 在 dart 中使用 JSON.decode() 从 json 字符串实例化类

标签 json dart angular-dart

通过浏览,我确实成功地创建了一个可以“选择加入”的类 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/

相关文章:

angular - 将主机和 ComponentResolver 从 AngularDart 4 迁移到 5

json - 如何以 json 格式显示 map 中的所有数据 - Golang?

java - 如何使用 FasterXML 从 json 解析成对列表

java - Android JSON 异常的错误处理

flutter - 修复了 Flutter Dart 上 DataTable 的列和行标题

dart - 在AngularDart中使用dart:html库

javascript - 从另一个对象中提取一个对象

dart - 在 Flutter 中的小部件之间传递数据的最佳方式

android - NoSuchMethodError,迭代器调用为null

dart - 我可以在 AngularDart 中将 Future 分配给 Controller 的属性吗?