Hey there! I'm trying to serialize data in AS3 but am running into a frustrating problem. Originally I had problems with "myObjClass" not being convertible, but after I discovered "registerClassAlias" I got things working allright.
Some time later, I added vectors to the myObjClass. I ran into trouble with Vector Strings before, as was reported here:
https://bugs.adobe.com/jira/browse/FP-6693
So I know the workaround is to include:
registerClassAlias("String", String);
I'm just not sure how to register an alias for a subvector within a vector (along with other variables). Here's my code:
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();
Problem #1: When these two lines are included in my compilation, the final line (bytes.readObject()) fails with the error:
Error #1034: Type Coercion failed: cannot convert __AS3__.vec::Vector.<Object>@42edb21 to __AS3__.vec.Vector.<myObjClass>.
This is really strange. It's as if the first two registerClassAlias's are undoing the third one.
Problem #2: If I comment out the two "first problem" lines (string/xml classalias registrations) it converts myObj to myObjClass just fine; no internal error is thrown and the application is not halted. However, it fails to convert the internal String and XML vectors, with this error appearing in the application Output (without halting):
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>.
So my question is, How can I register a class alias for:
- Vector.(myObjClass)
- A vector of Strings as a property of Vector.(myObjClass)
- A vector of XML as a property of Vector.(myObjClass)
All at the same time?