2009-07-27 87 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