2012-09-27 57 views
0

我堅持的一個問題: 在這我序列化數組集合到一個文件中,該陣列採集有兩種類型物品的圖像和類對象。 它成功地序列化,但是當我去序列化,它只是返回對象的數組集合,我發現我自己無法將這些對象轉換爲圖像和類對象(這個類是由我自己有三個成員,兩個圖像定義和形狀)。如何反序列化數組集合在柔性

我加入,我使用的代碼:

[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; 

     } 

最後一行

var loadArrAll:ArrayCollection = obj as ArrayCollection; 

這是問題。我得到的數組集合,但它只有一個對象沒有圖像,沒有我的類對象的名單(雖然這些是有,但我發現沒有辦法這個數組集合轉換在以前的形式,當我序列化它。)

+0

我發現了一些 '[遠程類的別名=(...)'。一些這樣的事情有人可以告訴我,我可以如何使用它與我的問題。 – Zain

+1

嗨,你能舉出一些示例代碼?對象在調試模式下是否有正確的變量? – Ryan

+0

並非一切都爲那些沒有你編寫代碼自己類自動序列化(您註冊您的評論中已經添加了以上內容的別名。 –

回答

0

類需要序列化/ deserialised需要實現flash.utils.IExternalizable

public function readExternal(input:IDataInput):void - here you restore object 
    public function writeExternal(output:IDataOutput):void - here you saving object 

問候

0

Zain公司,你必須聲明這樣你的類:

package com 
{ 
    [RemoteClass] 
    public class myClass 
    { 
     public function myClass() 
     { 
     } 
    } 
}