10

对于以下代码

var address = new Address();
address.street = 'N 34th';
address.city = 'Seattle';
var serialization = new Serialization()
 ..addRuleFor(address);
String output = serialization.write(address);

我如何获得这样的 json 输出:

address: {'street':'N 34th', 'city':'Seattle'}

上述代码生成的输出如下:

{"roots":[{"__Ref":true,"rule":3,"object":0}],"data":[[],[],[],[["Seattle","N 34th"]]],"rules":"{\"roots\":[{\"__Ref\":true,\"rule\":1,\"object\":0}],\"data\":[[],[[{\"__Ref\":true,\"rule\":4,\"object\":0},{\"__Ref\":true,\"rule\":3,\"object\":0},{\"__Ref\":true,\"rule\":5,\"object\":0},{\"__Ref\":true,\"rule\":6,\"object\":0}]],[[],[],[\"city\",\"street\"]],[[]],[[]],[[]],[[{\"__Ref\":true,\"rule\":2,\"object\":0},{\"__Ref\":true,\"rule\":2,\"object\":1},\"\",{\"__Ref\":true,\"rule\":2,\"object\":2},{\"__Ref\":true,\"rule\":7,\"object\":0}]],[\"Address\"]],\"rules\":null}"}
4

3 回答 3

12

事实证明,dart:json图书馆使这变得非常容易。您需要toJson在您的课程中实施以使其工作。

例如:

class Address {
  String street;
  String city;

  Map toJson() {
    return {"street": street, "city": city};
  }
}

main() {
  var addr = new Address();
  addr.street = 'N 34th';
  addr.city = 'Seattle';
  print(JSON.stringify(addr));
}

这将打印出:

{"street":"N 34th","city":"Seattle"}
于 2012-12-19T18:21:57.257 回答
1

您可以将JsonObject 用于 Dart,将其添加到您的pubspec.yaml文件中,然后运行pub install(工具 - > Pub 安装)

dependencies:
  json_object: 
    git: git://github.com/chrisbu/dartwatch-JsonObject.git

然后将您的代码更改为调用objectToJson

import 'package:json_object/json_object.dart';

var address = new Address();
address.street = 'N 34th';
address.city = 'Seattle';
String output =  objectToJson(address);

请注意,objectToJson目前仅在 Dart VM 中需要镜像支持(反射功能)。截至 2012 年 12 月 20 日,它在 dart2js 中不起作用。

于 2012-12-19T15:59:50.487 回答
0

我认为你想要 dart:json 包而不是序列化。序列化的输出是 JSON,但它是序列化结构的 JSON,它担心诸如处理周期之类的事情对于您正在查看的内容来说太过分了。使用基本的 json 包,您可以实现一个 toJson() 方法,该方法将进行转换并且自动处理基本系统对象。这样做的好处是不需要镜像,所以它可以在当前的 dartj2s 上工作。或者您可以像上一个答案一样使用 json_object 。

于 2012-12-19T18:19:14.750 回答