2014-01-21 1 views
2

Я хочу преобразовать свой класс в 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}"}

ответ

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; 
} 
+0

1) Этот пример преобразует объект в json. Есть ли форма для преобразования json для объекта с JSON.decode? 2) Используется дротик: зеркало. Работает с при преобразовании в JavaScript с dart2js? – Muka

1

new Address() создает полный прототип объекта, который вы видите. При этом они могли бы сделать что-то, чтобы избежать их части, но если вы хотите восстановить объект именно так, как это необходимо, это необходимо.

Чтобы увидеть полное содержание объекта вы используете инструкцию для() таким образом:

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

Вы увидите, что вы получите кучу данных таким образом. Без new Address() это было бы не так уж плохо.

0

Сериализация не поможет здесь ...

Вы могли бы дать попробовать в JsonObject библиотеку, и, возможно, пройти через this в глубине объяснения, как сделайте то, что вы пытаетесь сделать, используя зеркала.