如何使用Dart Serialization获取JSON序列化字符串

时间:2012-12-19 15:43:46

标签: json serialization dart

以下代码

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}"}

3 个答案:

答案 0 :(得分: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"}

答案 1 :(得分:1)

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

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中不起作用。

答案 2 :(得分:0)

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