Actionscript 3 如何在flex中反序列化数组集合
我遇到了一个问题: 在将数组集合序列化为文件的过程中,数组集合有两种类型的项:图像和类对象。 它序列化成功,但当我反序列化它时,它只返回对象的数组集合,我发现自己无法将这些对象转换为图像和类对象(这个类由我自己定义,有三个成员、两个图像和一个形状) 我正在添加我使用的代码:Actionscript 3 如何在flex中反序列化数组集合,actionscript-3,apache-flex,serialization,amf,Actionscript 3,Apache Flex,Serialization,Amf,我遇到了一个问题: 在将数组集合序列化为文件的过程中,数组集合有两种类型的项:图像和类对象。 它序列化成功,但当我反序列化它时,它只返回对象的数组集合,我发现自己无法将这些对象转换为图像和类对象(这个类由我自己定义,有三个成员、两个图像和一个形状) 我正在添加我使用的代码: [Bindable] var objcnvs:ClassCanvas; protected function btnSave_clickHandler(event:MouseEvent):void
[Bindable] var objcnvs:ClassCanvas;
protected function btnSave_clickHandler(event:MouseEvent):void
{
//for saving data serializaion
var arrAllSave:ArrayCollection = new ArrayCollection();
for(var i:int = 0;i<arrAll.length; i++)
{
try
{
var tempCon:ConnectImage = arrAll[i];
arrAllSave.addItem({item:arrAll[i], type:"ConnectImage" });
}
catch(er:Error)
{
var tempImage:Image = arrAll[i];
var objImage:ClassImage = new ClassImage(arrAll[i]);
arrAllSave.addItem({item:objImage, type:"Image" });
}
}
// First, generate your ByteArray from the VO.
var byteArray : ByteArray = new ByteArray();
byteArray.writeObject( arrAll );
// Resolve your file location.
//var file : File = File.applicationStorageDirectory.resolvePath( "testFile.ri" );
var mapName:String = txtMapTitle.text;
var file : File = File.applicationStorageDirectory.resolvePath( 'Saved Maps/'+mapName+'.imm' );
if(file.exists == true)
{
lblWarn.text = "Map already Exists. Please enter Defferent Map Title";
}
else if(mapName == "")
{
lblWarn.text = "Please enter a title for Map.";
}
else
{
var fileStream:FileStream = new FileStream();
// Save the file to the given location.
fileStream.open(file, FileMode.WRITE);
fileStream.writeBytes( byteArray );
fileStream.close();
lblWarn.text = "Map Saved successfully";
}
}
protected function btnLoadMap_clickHandler(event:MouseEvent):void
{
// Execute the file load.
var loadFileName:String = "t1";
var request : URLRequest = new URLRequest ( "app-storage:/"+"Saved Maps/"+loadFileName+".imm" );
var receptor : URLLoader = new URLLoader( request );
// Make sure our content is interpreted as a ByteArray.
receptor.dataFormat = URLLoaderDataFormat.BINARY;
receptor.addEventListener( Event.COMPLETE, fileLoadedHandler );
}
private function fileLoadedHandler ( event : Event ) : void
{
// Retrieve the event target, cast as the URLLoader we just created
var loader : URLLoader = event.target as URLLoader;
// Retrieve the loaded data. We know it's a ByteArray, so let's cast it as well.
var data : ByteArray = loader.data as ByteArray;
// Use the ByteArray.readObject method to reconstruct the object.
var obj : Object = data.readObject();
// Cast the object and assign it to our data container.
var loadArrAll:ArrayCollection = obj as ArrayCollection;
}
这就是问题所在。我得到了数组集合,但它只有一个对象列表,没有图像,也没有my class对象(虽然有这些对象,但在序列化它时,我发现无法以以前的形式转换此数组集合。)需要序列化/反序列化的类需要实现
向Zain致意,你必须这样声明你的类:
package com
{
[RemoteClass]
public class myClass
{
public function myClass()
{
}
}
}
我找到了一些“[远程类别名=(…)]”。诸如此类的事情,有人能告诉我如何使用它来处理我的问题吗?嗨,你能提供一些示例代码吗?对象在调试模式下是否具有正确的变量?对于那些不需要自己编写代码的类,并不是所有内容都可以自动序列化(您将使用您在注释中添加的代码段注册别名。嘿,Lukasz'Severiaan'Grela,您能给出一些代码示例吗?我认为这是一个解决方案。为什么不在服务器端序列化/反序列化?
public function readExternal(input:IDataInput):void - here you restore object
public function writeExternal(output:IDataOutput):void - here you saving object
package com
{
[RemoteClass]
public class myClass
{
public function myClass()
{
}
}
}