数组子类无法反序列化,错误#1034

时间:2010-03-28 23:21:19

标签: flex flash actionscript-3 serialization typeerror

我从ByteArray反序列化时发现了一个奇怪的错误,其中Vector s不能包含扩展Array的类型:反序列化时会出现TypeError。

TypeError: Error #1034: Type Coercion failed: cannot convert []@4b8c42e1 to com.myapp.ArraySubclass.
    at flash.utils::ByteArray/readObject()
    at com.myapp::MyApplication()[/Users/aaaidan/MyApp/com/myapp/MyApplication.as:99]

以下是:

public class Application extends Sprite {
    public function Application() {
        // register the custom class
        registerClassAlias("MyArraySubclass", MyArraySubclass);        

        // write a vector containing an array subclass to a byte array
        var vec:Vector.<MyArraySubclass> = new Vector.<MyArraySubclass>();
        var arraySubclass:MyArraySubclass = new MyArraySubclass();
        arraySubclass.customProperty = "foo";
        vec.push(arraySubclass);

        var ba:ByteArray = new ByteArray();
        ba.writeObject(arraySubclass);
        ba.position = 0;

        // read it back
        var arraySubclass2:MyArraySubclass = ba.readObject() as MyArraySubclass; // throws TypeError
    }
}

public class MyArraySubclass extends Array {
    public var customProperty:String = "default";
}

这是一个非常具体的案例,但对我来说似乎很奇怪。任何人都有任何想法导致它,或如何解决它?

1 个答案:

答案 0 :(得分:2)

好吧,似乎阵列序列化是硬编码的。你一定要发布一个错误报告。

实际上,您发布的代码不会引发错误,因为ba.readObject() as MyArraySubclass只是nullMyArraySubclass(ba.readObject())但是会​​。

你可以尝试修复它,将是实现IExternalizable,尽管我不确定它会更好。

我想问题是Array在ActionScript中是一个非常特殊的类(在某种意义上它只不过是任何其他动态类,但在其他方面它根本不是)导致VM中有很多Array特定代码。另外,问题是,为什么需要继承Array