Сериализация объектов Flex для сохранения / восстановления состояния приложения - PullRequest
1 голос
/ 02 марта 2009

Можно ли сериализовать иерархию объектов во Flex, отправить двоичные данные в URL-адрес для хранения / извлечения на / с сервера и десериализовать данные для восстановления исходного состояния объектов?

Я знаю, что возможно преобразовать объекты в формат XML (еще не пробовал), но я надеюсь избежать синтаксического анализа XML и перестройки объектов вручную. Было бы неплохо иметь функциональность, которая может сериализовать / десериализовывать объекты в простой двоичный формат (в прошлом я делал нечто подобное в Java, хотя и не так легко, как хотелось бы). Функция 'eval' в Perl похожа на то, что я ищу, без сохранения кода, конечно.

В псевдокоде я хотел бы сделать следующее:

private var contentToSave:HBox = new HBox();

private function saveState(event:Event):void {
    var toSave:HBox = this.contentToSave;
    var data:? = /* serialize 'toSave' ActionScript classes to binary data*/;
    sendDataToServer(data, filename);
}
private function restoreState(filename):void {
    var data:? = getDataFromServer(filename);
    var savedData:HBox = /* deserialize binary 'data' to ActionScript classes */;
    this.contentToSave = savedData;
}

Ответы [ 2 ]

4 голосов
/ 02 марта 2009

Взгляните на ByteArray.writeObject () . который сохраняет переданный объект в формате AMF в байтовый массив. Я не слишком часто использовал эту функцию, я точно не знаю, какие объекты она может сериализовать, но определенно не все.

1 голос
/ 02 марта 2009

Попробуйте пакет serialization на основе JSON в ascorelib .

[...] но я надеюсь избежать разбора XML и перестроения объектов вручную

AS обрабатывает XML так же, как и любой другой собственный тип. Будьте уверены. XML - это предпочтительный способ работы с данными, которые вы будете извлекать и возвращать на сервер. Конечно, ascorelib дает вам класс JSON - так что вы можете посмотреть и на это.

Функция 'eval' в Perl похожа на то, что я ищу, конечно, без сохранения кода.

IIRC, eval является частью спецификации ECMAScript (и вы найдете ее в Javascript). Но не в AS3.0. Это было в некоторой степени в некоторых предыдущих версиях, но больше не поддерживается.

...