2

我想将我的课程转换为 aMap所以我正在使用Serialization包。从示例中看起来很简单:

var address = new Address();
 address.street = 'N 34th';
 address.city = 'Seattle';
 var serialization = new Serialization()
     ..addRuleFor(Address);
 Map output = serialization.write(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

3

序列化不应该创建人类可读的输出。也许 JSON 输出更符合您的要求:

import dart:convert;

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

var encoded = JSON.encode(address, mirrorJson);
}

Map mirrorJson(o) { 
  Map map = new Map();
  InstanceMirror im = reflect(o);
  ClassMirror cm = im.type;
  var decls = cm.declarations.values.where((dm) => dm is VariableMirror);
  decls.forEach((dm) {
    var key = MirrorSystem.getName(dm.simpleName);
    var val = im.getField(dm.simpleName).reflectee;
    map[key] = val;
  });

  return map;
}   
于 2014-01-22T03:17:30.890 回答
1

创建一个完整的new Address()原型对象,这就是您所看到的。话虽如此,他们本可以采取一些措施来避免其中的一部分,但如果您想按原样恢复对象,那是必要的。

要查看对象的完整内容,请按以下方式使用 for() 指令:

for(obj in idx) alert(obj[idx]);

您会看到以这种方式获得大量数据。没有new Address()它可能不会那么糟糕。

于 2014-01-21T23:53:48.120 回答
0

序列化在这里对您没有帮助...

您可能会尝试使用JsonObject库,并且可能会深入了解如何使用镜像来做您想做的事情。

于 2014-01-22T04:30:29.097 回答