Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Сериализация в JSON (http://www.flasher.ru/forum/showthread.php?t=175704)

Stitch512 22.02.2012 16:14

Сериализация в JSON
 
Подскажите, если кто знает, сериализаторы произвольных объектов (классов) в JSON. Разумеется с использованием метаданных. Т.е. в классе метатегами отмечаем поля для сериализации, их тип и т.д., и соответсвенно на выходе имеем JSON. И желательно с возможностью подмены классов. Т.е. к примеру два класса с общим интерфейсом, сохраняем первый класс а при загрузке указываем чтобы создавался экземпляр второго.

kackbip 22.02.2012 16:20

В as3 можно использовать подобного рода метаданные? Что-то не слышал раньше.

Inet_PC 22.02.2012 16:26

Придется рядом с каждым полем к. нужно сериализовать метатег, уколебешься.
Цитата:

В as3 можно использовать подобного рода метаданные? Что-то не слышал раньше.
keep-as3-metadata и describytype/

Stitch512 22.02.2012 16:29

Код AS3:

Придется рядом с каждым полем к. нужно сериализовать метатег, уколебешься.

Ну не обязательно, можно как с тегом [Bind] поступить. Если он указан у класса то сериализуются все поля, иначе только отмеченные. Та и в любом случае, если не сериализация метатегами то вручную поля записывать, менее универсально а объем кода такой же.

dimarik 22.02.2012 16:31

А шо, JSON поддерживает строгую типизацию?

Genzo 22.02.2012 16:31

Цитата:

Т.е. в классе метатегами отмечаем поля для сериализации, их тип и т.д., и соответсвенно на выходе имеем JSON.
Можно попробовать через Object.setPropertyIsEnumerable, и у всех интерфейс типа
Код AS3:

interface IJSONSerializable {
serialize():String
unserialize(value:String):void
}

Но на сколько я помню, есть нативная поддержка всего этого начиная с 11 флеша http://help.adobe.com/en_US/FlashPla...pt/3/JSON.html

Stitch512 22.02.2012 16:35

Код AS3:

А шо, JSON поддерживает строгую типизацию?

Нет, для этого нужно будет дополнительно хранить тип объекта, но это уже детали реализации.

Добавлено через 5 минут
Genzo: Немного не то. Мне нужно сохранять объекты произвольного типа и структуры, тип объекта для восстановления соответственно будет тоже сохраняться. Просто хотел вначале узнать, есть ли уже готовые решения, пока не сталкивался.

dimarik 22.02.2012 16:48

А зачем тогда JSON? AMF3 из коробки поддерживает типы и ссылки.

Stitch512 22.02.2012 16:53

Сохранять нужно в текстовый файл и не все поля класса а только необходимые.

dimarik 22.02.2012 17:05

Я покажусь занудой, но что такое "текстовый" файл? Бессмысленный набор байтов. Пишите в текстовый файл, это не запрещено. Ну а [Transient] поддерживается нативно.

Добавлено через 3 минуты
Код AS3:

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;

Код AS3:

internal class AClass {
 
        public function AClass() {
                super();
        }
 
        [Transient]
        public var publicVarOne:        String;
        public var publicVarTwo:        String;
 
}



Часовой пояс GMT +4, время: 19:59.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.