无法在AS3中的子类中序列化向量

And*_*ore 4 serialization amf actionscript-3

嘿!我正在尝试在AS3中序列化数据,但遇到了令人沮丧的问题.最初我遇到"myObjClass"无法转换的问题,但在我发现"registerClassAlias"之后,我让事情变得很好.

一段时间后,我向myObjClass添加了向量.我之前遇到了Vector Strings的麻烦,正如在此报道的那样:

https://bugs.adobe.com/jira/browse/FP-6693

所以我知道解决方法是包括:

registerClassAlias("String", String);
Run Code Online (Sandbox Code Playgroud)

我只是不确定如何在向量中注册子向量的别名(以及其他变量).这是我的代码:

var newObj:myObjClass = new myObjClass();
newObj.mySubXML = new Vector.<XML>();
newObj.mySubString = new Vector.<String>();

var myObj:Vector.<myObjClass> = new Vector.<myObjClass>();
myObj.push(newObj);

registerClassAlias("String", String); // Problem #1
registerClassAlias("XML", XML);       // Problem #1
registerClassAlias("VecMyObjClass", Vector.<myObjClass> as Class); // Problem #2
// registerClassAlias("myObjClass", myObjClass); // This and the above are interchangable (same errors)
var bytes:ByteArray = new ByteArray();
bytes.writeObject(myObj);
bytes.position = 0;
myObj = bytes.readObject();
Run Code Online (Sandbox Code Playgroud)

问题#1:当我的编译中包含这两行时,最后一行(bytes.readObject())失败并显示错误:

Error #1034: Type Coercion failed: cannot convert __AS3__.vec::Vector.<Object>@42edb21 to __AS3__.vec.Vector.<myObjClass>.
Run Code Online (Sandbox Code Playgroud)

这真的很奇怪.就好像前两个registerClassAlias正在撤消第三个.

问题2:如果我注释掉两个"第一个问题"行(string/xml classalias注册),它将myObj转换为myObjClass就好了; 不会抛出内部错误,也不会停止应用程序.但是,它无法转换内部String和XML向量,此错误出现在应用程序输出中(没有停止):

TypeError: Error #1034: Type Coercion failed: cannot convert __AS3__.vec::Vector.<Object>@3aabc11 to __AS3__.vec.Vector.<XML>.
TypeError: Error #1034: Type Coercion failed: cannot convert __AS3__.vec::Vector.<Object>@3aabc41 to __AS3__.vec.Vector.<String>.
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,如何为以下内容注册类别名:

  • 矢量(myObjClass)
  • 字符串向量作为向量的属性.(myObjClass)
  • XML的矢量作为Vector的属性.(myObjClass)

一切都在同一时间?

And*_*ore 6

看起来像移动:

registerClassAlias("XML", XML);
registerClassAlias("String", String);
Run Code Online (Sandbox Code Playgroud)

进入myObjClass直接做了诀窍,同时保留:

registerClassAlias("myObjClass", myObjClass);
Run Code Online (Sandbox Code Playgroud)

在序列化类中.我不确定为什么在序列化类中将三者一起存储不起作用 - 如果我改变了代码的顺序就会产生奇怪的错误,所以问题可能只是特定机器上的一些小问题.