Dart JSON 解码器

标签 dart

令我惊讶的是,dart 没有内置的对象到 json 和 json 到对象的映射器。

我读到我们必须自己手动编写映射代码,这并不令人愉快。

无论如何,虽然我没有针对我的用例对其进行彻底测试,但我发现了 dart-exportable对我一半的要求很有帮助。

有什么推荐的 json 到对象解码的包吗?

最佳答案

您最好的选择是使用 Smoke图书馆。

它是 Mirrors 功能的一个子集,但同时具有基于 Mirrors 和基于 Codegen 的实现。它是由 PolymerDart 团队编写的,因此它与我们即将获得的“官方”一样接近。

在开发过程中,它会使用基于镜像的编码/解码;但对于发布,您可以创建一个小型转换器来生成代码。

Seth Ladd 创建了 a code sample here ,我extended slightly支持子对象:

abstract class Serializable {
  static fromJson(Type t, Map json) {
    var typeMirror = reflectType(t);
    T obj = typeMirror.newInstance(new Symbol(""), const[]).reflectee;
    json.forEach((k, v) {
      if (v is Map) {
        var d = smoke.getDeclaration(t, smoke.nameToSymbol(k));
        smoke.write(obj, smoke.nameToSymbol(k), Serializable.fromJson(d.type, v));
      } else {
        smoke.write(obj, smoke.nameToSymbol(k), v);
      }
    });
    return obj;
  }

  Map toJson() {
    var options = new smoke.QueryOptions(includeProperties: false);
    var res = smoke.query(runtimeType, options);
    var map = {};
    res.forEach((r) => map[smoke.symbolToName(r.name)] = smoke.read(this, r.name));
    return map;
  }
}

目前,Smoke 不支持获取泛型类型信息(例如支持 List);但是我在这里提出了一个案例:

https://code.google.com/p/dart/issues/detail?id=20584

在这个问题被实现之前,你想要的一个“好的”实现是不可行的;但我希望它能尽快实现;因为做像 JSON 序列化这样基本的事情有点依赖于它!

关于Dart JSON 解码器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25615241/

相关文章:

flutter - Dart中的日期格式,其中包括GMT

constructor - 是否可以避免在 Dart 中默认调用 super 构造函数?

firebase - 当我想获取我的图片下载链接 Flutter 时遇到问题(请求没有应用检查 token 。)

flutter - 如何阻止 gridview.builder 在 flutter 中生成项目

dart - Angular Dart中的工具提示

firebase - pubspec.yaml : Expected a key while parsing a block mapping when adding cloud_firestore

flutter - 如何使 ExpansionTile 尾随图标旋转?

dart - Flutter:使用二进制正文上传图像

flutter - 命令 “flutter create”如何工作?

android-studio - 这个常量表达式的计算抛出一个表达式