Сериализуйте объекты Flex для сохранения / восстановления состояния приложения
-
03-07-2019 - |
Вопрос
Можно ли сериализовать иерархию объектов в 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;
}
Решение
Попробуйте использовать JSON на основе serialization
упаковка в аскорэлиб.
[...] но я надеюсь избежать синтаксического анализа XML и перестройки объектов вручную
AS обрабатывает XML точно так же, как и любой другой собственный тип.Будьте уверены.XML - это предпочтительный способ работы с данными, которые вы будете извлекать и возвращать обратно на сервер.Конечно, в ascorelib
предоставляет вам класс JSON, так что вы, возможно, захотите взглянуть и на это.
Функция 'eval' в Perl похожа на то, что я ищу, без сохранения кода, конечно.
IIRC, eval
является частью спецификации ECMAScript (и вы найдете ее в Javascript).Но не в AS3.0.В определенной степени это было в некоторых предыдущих версиях?), Но больше не поддерживается.
Другие советы
Взгляните на ByteArray.writeObject().который сохраняет переданный объект в формате AMF в массив байтов.Я не слишком часто пользовался этой функцией, я точно не знаю, какие объекты она может сериализовать, но определенно не все.