I need to convert from obj:Object to strongly typed object.
I am using the following code and it works fine besides the fact that
it will not work for ArrayCollections
Here is my code which converts from plain object to strongly typed
object:
public static function objectToInstance( object:Object,
clazz:Class ):*
{
var bytes:ByteArray = new ByteArray();
bytes.objectEncoding = ObjectEncoding.AMF0;
// Find the objects and byetArray.writeObject them, adding in
the
// class configuration variable name -- essentially, we're
constructing
// and AMF packet here that contains the class information so
that
// we can simplly byteArray.readObject the sucker for the
translation
// Write out the bytes of the original object
var objBytes:ByteArray = new ByteArray();
objBytes.objectEncoding = ObjectEncoding.AMF0;
objBytes.writeObject( object );
// Register all of the classes so they can be decoded via AMF
var typeInfo:XML = describeType( clazz );
var fullyQualifiedName:String =
[EMAIL PROTECTED]().replace( /::/, "." );
registerClassAlias( fullyQualifiedName, clazz );
// Write the new object information starting with the class
information
var len:int = fullyQualifiedName.length;
bytes.writeByte( 0x10 ); // 0x10 is AMF0 for "typed object
(class
instance)"
bytes.writeUTF( fullyQualifiedName );
// After the class name is set up, write the rest of the object
bytes.writeBytes( objBytes, 1 );
// Read in the object with the class property added and return
that
bytes.position = 0;
// This generates some ReferenceErrors of the object being
passed in
// has properties that aren't in the class instance, and
generates
TypeErrors
// when property values cannot be converted to correct values
(such
as false
// being the value, when it needs to be a Date instead).
However,
these
// errors are not thrown at runtime (and only appear in trace
ouput
when
// debugging), so a try/catch block isn't necessary. I'm not
sure
if this
// classifies as a bug or not... but I wanted to explain why if
you
debug
// you might seem some TypeError or ReferenceError items appear.
var result:* = bytes.readObject();
return result;
}
Thanks for Darron Schall for the code.
It works great for all the properties besides ArrayCollection
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Flex
India Community" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/flex_india?hl=en
-~----------~----~----~----~------~----~------~--~---