Sérialiser des objets Flex pour enregistrer / restaurer l'état de l'application
-
03-07-2019 - |
Question
Est-il possible de sérialiser une hiérarchie d'objets dans Flex, d'envoyer les données binaires vers une URL pour le stockage / la récupération sur / depuis un serveur et de désérialiser les données pour restaurer l'état d'origine des objets?
Je sais qu'il est possible de convertir les objets au format XML (je ne l'ai pas encore essayé), mais j'espère éviter l'analyse XML et la reconstruction manuelle des objets. Il serait intéressant de disposer de fonctionnalités permettant de sérialiser / désérialiser des objets dans un format binaire simple (j’avais fait quelque chose de similaire dans le passé en Java, mais pas aussi facilement que je l’aurais souhaité). La fonction 'eval' dans Perl est similaire à ce que je recherche, sans enregistrer le code, bien sûr.
Dans le pseudo-code, voici ce que je voudrais faire:
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;
}
La solution
Essayez le package de sérialisation
basé sur JSON dans ascorelib .
[...] mais j'espère éviter l'analyse XML et la reconstruction manuelle des objets
AS gère XML comme tout autre type natif. Repos assuré. XML est le moyen privilégié de traiter les données que vous allez extraire et remettre sur un serveur. Bien sûr, ascorelib
vous donne une classe JSON - vous pouvez donc également y jeter un coup d'oeil.
La fonction "eval" dans Perl est similaire à ce que je recherche, sans enregistrer le code, bien sûr.
IIRC, eval
fait partie de la spécification ECMAScript (et vous le trouverez en Javascript). Mais pas dans AS3.0. Il existait dans une certaine mesure dans certaines versions précédentes, mais n'est plus pris en charge.
Autres conseils
Jetez un coup d'oeil à ByteArray .writeObject () . qui enregistre l'objet transmis au format AMF dans le tableau d'octets. Je n'ai pas trop utilisé cette fonction, je ne sais pas exactement quel type d'objets elle peut sérialiser, mais certainement pas tous.