Flexオブジェクトをシリアル化してアプリケーションの状態を保存/復元する
-
03-07-2019 - |
質問
Flexでオブジェクトの階層をシリアル化して、バイナリデータをサーバーへの/からの保存/取得のためにURLに送信し、データを逆シリアル化してオブジェクトの元の状態を復元することは可能ですか?
オブジェクトをXML形式に変換できることはわかっています(まだ試していません)が、XMLの解析とオブジェクトの手動での再構築を避けたいと思っています。オブジェクトを単純なバイナリ形式にシリアライズ/デシリアライズできる機能があればいいと思います(以前はJavaで似たようなことをしましたが、それほど簡単ではありませんでした)。 Perlの 'eval'関数は、コードを保存することなく、私が探しているものに似ています。
擬似コードで、私がやりたいことは次のとおりです。
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;
}
解決
[...]しかし、XMLの解析とオブジェクトの手動での再構築を避けたいと思っています
ASは、他のネイティブタイプと同様にXMLを処理します。安心してください。 XMLは、サーバー上でデータを処理して戻す際の好ましい処理方法です。もちろん、 ascorelib
はJSONクラスを提供するので、これもご覧ください。
Perlの「eval」関数は、私が探しているものに似ています。もちろん、コードを保存することはありません。
IIRC、 eval
はECMAScript仕様の一部です(Javascriptで確認できます)。しかし、AS3.0ではそうではありません。以前のバージョンではある程度存在していましたが、サポートされなくなりました。
他のヒント
ByteArrayをご覧ください.writeObject()。渡されたオブジェクトをAMF形式でバイト配列に保存します。この関数はあまり使用していません。どの種類のオブジェクトをシリアル化できるか正確にはわかりませんが、すべてではありません。