我想将我的班级转换为Map
所以我正在使用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}"}
答案 0 :(得分: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;
}
答案 1 :(得分:1)
new Address()
创建一个完整的原型对象,这就是你所看到的。话虽这么说,他们本可以做些什么来避免其中的一部分,但如果你想恢复对象,那就是必要的。
要查看对象的完整内容,请以这种方式使用for()指令:
for(obj in idx) alert(obj[idx]);
您会看到以这种方式获取大量数据。没有new Address()
,它可能不会那么糟糕。
答案 2 :(得分:0)
序列化对你没有帮助......
您可以尝试JsonObject库,也可以通过this深入解释如何使用镜像执行您要执行的操作。