flex-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Michael A. Labriola" <labri...@digitalprimates.net>
Subject RFC - additional registerClassAlias
Date Thu, 05 Apr 2012 20:55:25 GMT
Okay, now that we almost have a VectorCollection, we have a bridge to cross... Serialization
or actually Deserialization.

If I serialize this Vector:

var vector:Vector.<String> = new Vector.<String>();
var vector2:Vector.<String>;

var ba:ByteArray = new ByteArray();
ba.writeObject( vector );

All is well. However, when I deserialize it, I will receive a crash:

ba.position = 0;
vector2 = ba.readObject();

TypeError: Error #1034: Type Coercion failed: cannot convert __AS3__.vec::Vector.<Object>@620f061
to __AS3__.vec.Vector.<String>.

That is because, when it attempt to deserialize the ByteArray, it does so as a Vector of type
Object as it does not properly recognize the alias of the type of the Vector's contents. Now,
for fun, if I first register a class alias for String:

registerClassAlias( "String", String );

All works properly, as the alias of String is looked up and properly deserialized. So, given
this little bit of frustration. What would everyone think about further modifying the compiler
to add registrations for the basic types in the startup of Flex apps? In the _ProjectName_FlexInit-generated.as,
the compiler already adds to registerClassAlias calls for ObjectProxy to work around some
memory leak issues. We could add registrations for the basic types right here. This would
mean the Vectors, and hence VectorCollection and VectorList instance, would deserialize as
expected in our Flex apps.

This is the first of many compiler changes I have made and want to discuss.


digital primates (r)

Michael Labriola

tel:  +1.773.693.7800 x206
fax: +1.773.409.9251

  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message