2009-07-27 86 views
1

我想要做的就是走一個對象,這也是對象和輸出的ActionScript 3代碼花(或需要)來創建實例化並填充物和一個複雜的樹所有的孩子。AS3對象序列化(至AS3代碼)

因此,例如,如果你看到在調試器像這樣

myObjectToParse ([email protected]) 
----------[0]someBlob ([email protected])|null 
----------[1]someChildren ([email protected]) 
--------------------[0]childFoo ([email protected]) 
------------------------------someProperty ([email protected]) | 45 
------------------------------someOtherProperty ([email protected]) | 45 
--------------------[1]childBar ([email protected]) 
------------------------------someStringProperty([email protected]) | "hello world" 

出口商會吐出:

public class MySerialized extends ParseMe 
{ 
    public var someBlob:SomeBlob; 
    public var someChildren:Array; 

    public function MySerialized() 
    { 
     //populateSomeBlob(); //its null so the export doesn't write it out  
     populateSomeChildren();  
    } 

    private function populateSomeChildren() 
    { 
     someChildren=new Array(2); 
     var childFoo:ChildFoo=new ChildFoo(); 
     childFoo.someProperty=45; 
     childFoo.someOtherProperty=45; 
     childFoo.someProperty=45; 
     childFoo.someOtherProperty=45; 

     var childBar=new ChildBar(); 
     childBar.someStringProperty="hello world"; 

     someChildren[0]=childFoo; 
     someChildren[1]=childBar; 
    } 
} 

任何提示嗎?想法?謝謝!

編輯:我想我可能最終只是試圖序列化爲一個amf ByteArray ...聽起來更簡單,但我沒有玩過,不知道它可以去多少級別以及什麼類型的引用它支持。

回答

4
一般

,這是不可能的,恐怕......例如,你有隻讀屬性...還有,一些類的構造函數初始化預計值(雖然我個人覺得這不是在大多數情況下是非常聰明的,但確定)......還有,某些對象可能是私有/內部類的實例,因此生成的實例代碼將拋出錯誤......

但是,您可以做一個解決方案爲對象,不存在這些問題......

OK,基本上flash.utils.describeType將是一個很大的幫助的...這會給你一個對象的所有字段(也告訴你,這是否只讀域等),以及類名...

這將幫助你遍歷一個對象屬性......對於動態對象(describeType將告訴你),你將不得不使用for-in循環遍歷屬性...使用*作爲迭代變量的類型,這樣它也將與Dictionary S表示例如工作...

,那麼你需要治療特定內置類型特殊...

  • XML:使用XML::toXMLString ...這會給你一個XML字面基...
  • Array:循環通過它,並建立文字
  • NumberintuintBoolean數組:使用標準字符串一個文字的表示
  • String:記住要逃避字符串(換行符,反斜槓等等)...最簡單的就是"unescape('"+escape(yourStringValue)+"');" ......你當然可以創建一個具有轉義序列的正常String字面值......最簡單的方法是com.adobe.serialization.JSON.serialize(yourStringValue)(使用as3corelib)
  • Date:使用類似"new Date("+yourDateValue.getTime()+");" ......雖然這是值得懷疑,是否真的有意義harcode日期...
  • DisplayObject和子類:這不會是微不足道的,如果你真的想...你會需要找到一種方法來正確重建顯示列表層次結構...
  • IEventDispatcher和實現者:這是不可能的...沒有辦法找到註冊到IEventDispatcher的處理程序,再加上你將很難從函數對象生成ActionScript(很不可能)... 您將不得不選擇遞歸方法......請注意如果你想支持循環引用,這會比較困難......你可能會想你設計你的算法之前採取的決定...

希望這有助於...

格爾茨

back2dos

+0

請注意,形狀在Flash IDE中繪製的內容不能通過AS3獲取...... :( – Cay 2009-07-27 19:29:07