Je viens de trouver une erreur étrange lors de la désérialisation d'un ByteArray
, où Vector
ne peut pas contenir de types qui s'étendent Array
: il y a une erreur TypeError lorsqu'ils sont désérialisés.Les sous-classes de tableaux ne peuvent pas être désérialisées, Erreur # 1034
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]
Voilà comment:
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";
}
Il est un cas assez précis, mais il me semble très étrange. Quelqu'un a-t-il des idées sur ce qui le cause ou comment cela pourrait-il être réparé?
Salut, merci pour la réponse. Lorsque vous dites que le code ne génère pas d'erreur, je voudrais signaler qu'il renvoie une erreur de _within_ dans la méthode readObject de ByteArray, et pas seulement dans la classe Application. Donc ce n'est pas le casting que j'ai là qui jette l'erreur, c'est la désérialisation ... tu vois ce que je veux dire? – aaaidan
C'est vraiment bizarre, car il va se désérialiser correctement, tant qu'il n'est pas sérialisé dans un vecteur. Je vais déposer un bug, maintenant vous le mentionnez ... merci pour le support. – aaaidan