Serializar objetos flexibles para guardar / restaurar el estado de la aplicación
-
03-07-2019 - |
Pregunta
¿Es posible serializar una jerarquía de objetos en Flex, enviar los datos binarios a una URL para almacenamiento / recuperación en / desde un servidor y deserializar los datos para restaurar el estado original de los objetos?
Sé que es posible convertir los objetos a un formato XML (aún no lo he probado), pero espero evitar analizar XML y reconstruir los objetos manualmente. Sería bueno tener una funcionalidad que pueda serializar / deserializar objetos a un formato binario simple (hice algo similar en el pasado en Java, aunque no tan fácilmente como me hubiera gustado). La función 'evaluar' en Perl es similar a lo que estoy buscando, sin guardar el código, por supuesto.
En pseudocódigo, esto es lo que me gustaría hacer:
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;
}
Solución
Pruebe el paquete de serialización
basado en JSON en ascorelib .
[...] pero espero evitar analizar XML y reconstruir los objetos manualmente
AS maneja XML como cualquier otro tipo nativo. Está seguro. XML es la forma preferida de manejar los datos que va a extraer y volver a colocar en un servidor. Por supuesto, el ascorelib
le ofrece una clase JSON, por lo que es posible que desee ver eso también.
La función 'eval' en Perl es similar a lo que estoy buscando, sin guardar el código, por supuesto.
IIRC, eval
es parte de la especificación ECMAScript (y lo encontrará en Javascript). Pero no en AS3.0. Estuvo allí hasta cierto punto en algunas versiones anteriores (s) pero ya no es compatible.
Otros consejos
Eche un vistazo a ByteArray .writeObject () . que guarda el objeto pasado en formato AMF en la matriz de bytes. No he usado demasiado esta función, no sé exactamente qué tipo de objetos puede serializar, pero definitivamente no todos.