是否可以在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;
}
答案 0 :(得分:4)
看看ByteArray.writeObject()。它将AMF格式的传递对象保存到字节数组中。我没有太多使用这个函数,我不知道它可以序列化什么类型的对象,但绝对不是全部。
答案 1 :(得分:1)
在ascorelib中尝试使用基于JSON的serialization
包。
[...]但我希望避免解析XML并手动重建对象
AS处理XML就像任何其他本机类型一样。放心。 XML是处理您将要关闭并重新放回服务器的数据的首选方式。当然,ascorelib
为您提供了一个JSON类 - 所以您可能也想看看它。
Perl中的'eval'函数与我正在寻找的类似,当然也没有保存代码。
IIRC,eval
是ECMAScript规范的一部分(您可以在Javascript中找到它)。但不是在AS3.0中。它在某种程度上存在于某些先前版本(s?)中,但不再受支持。