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:
All at the same time?
Looks like moving:
registerClassAlias("XML", XML);
registerClassAlias("String", String);
Into myObjClass directly did the trick, while retaining:
registerClassAlias("myObjClass", myObjClass);
In the serialization class. I'm not sure why storing the three together in the serialization class wasn't working - and was generating strange errors if I changed the order of the code, so the problem might just be some glitch on specific machine.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With