Просмотр полной версии : Сериализация в JSON
Stitch512
22.02.2012, 16:14
Подскажите, если кто знает, сериализаторы произвольных объектов (классов) в JSON. Разумеется с использованием метаданных. Т.е. в классе метатегами отмечаем поля для сериализации, их тип и т.д., и соответсвенно на выходе имеем JSON. И желательно с возможностью подмены классов. Т.е. к примеру два класса с общим интерфейсом, сохраняем первый класс а при загрузке указываем чтобы создавался экземпляр второго.
В as3 можно использовать подобного рода метаданные? Что-то не слышал раньше.
Придется рядом с каждым полем к. нужно сериализовать метатег, уколебешься.
В as3 можно использовать подобного рода метаданные? Что-то не слышал раньше.
keep-as3-metadata и describytype/
Stitch512
22.02.2012, 16:29
Придется рядом с каждым полем к. нужно сериализовать метатег, уколебешься.
Ну не обязательно, можно как с тегом [Bind] поступить. Если он указан у класса то сериализуются все поля, иначе только отмеченные. Та и в любом случае, если не сериализация метатегами то вручную поля записывать, менее универсально а объем кода такой же.
А шо, JSON поддерживает строгую типизацию?
Т.е. в классе метатегами отмечаем поля для сериализации, их тип и т.д., и соответсвенно на выходе имеем JSON.
Можно попробовать через Object.setPropertyIsEnumerable, и у всех интерфейс типа interface IJSONSerializable {
serialize():String
unserialize(value:String):void
}
Но на сколько я помню, есть нативная поддержка всего этого начиная с 11 флеша http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/JSON.html
Stitch512
22.02.2012, 16:35
А шо, JSON поддерживает строгую типизацию?
Нет, для этого нужно будет дополнительно хранить тип объекта, но это уже детали реализации.
Добавлено через 5 минут
Genzo: Немного не то. Мне нужно сохранять объекты произвольного типа и структуры, тип объекта для восстановления соответственно будет тоже сохраняться. Просто хотел вначале узнать, есть ли уже готовые решения, пока не сталкивался.
А зачем тогда JSON? AMF3 из коробки поддерживает типы и ссылки.
Stitch512
22.02.2012, 16:53
Сохранять нужно в текстовый файл и не все поля класса а только необходимые.
Я покажусь занудой, но что такое "текстовый" файл? Бессмысленный набор байтов. Пишите в текстовый файл, это не запрещено. Ну а [Transient] поддерживается нативно.
Добавлено через 3 минуты
registerClassAlias('$', AClass);
const o:AClass = new AClass();
o.publicVarOne = 'publicVarOne';
o.publicVarTwo = 'publicVarTwo';
const ba:ByteArray = new ByteArray();
ba.writeObject(o);
ba.position = 0;
const oo:AClass = ba.readObject() as AClass;
internal class AClass {
public function AClass() {
super();
}
[Transient]
public var publicVarOne: String;
public var publicVarTwo: String;
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.