public void WriteDefaultObjectForType(Type type) { // get serializer IAmf3Serializer serializer = GetSerializerForType(type); // create default instance var defaultInstance = serializer.NewInstance(null); // write object using serializer serializer.WriteObject(this, defaultInstance); }
public object ReadAmf3Object() { Amf3Object.Flags flags = (Amf3Object.Flags)ReadInteger(); if ((flags & Amf3Object.Flags.Inline) == 0) { return(GetTableEntry(objectTable, ((int)flags) >> 1)); } Amf3ClassDef classDef; if ((flags & Amf3Object.Flags.InlineClassDef) == 0) { classDef = GetTableEntry(traitTable, ((int)flags) >> 2); } else { classDef = ReadAmf3ClassDef(flags); } // get the serializer to use (start with the override serializer) IAmf3Serializer serializer = OverrideSerializer; if (serializer == null) { // no override? get serializer from class definition serializer = classDef.Serializer; if (serializer == null) { // no serializer for class definition? use default serializer serializer = DefaultSerializer; } } // fast path the Amf3Object serializer if (serializer is Amf3Object.Serializer) { var obj = new Amf3Object(classDef); // add to object table objectTable.Add(obj); // read all properties into object int count = classDef.Properties.Length; for (int i = 0; i < count; i++) { ReadNextObject(ref obj.Values[i]); } // read dynamic properties if (classDef.Dynamic) { string key = ReadString(); while (key != "") { var value = ReadNextObject(); obj.SetPropertyValueAsObject(key, value); key = ReadString(); } } return(obj); } else { // create object instance using serializer object obj = serializer.NewInstance(classDef); // add to object table objectTable.Add(obj); // begin property remapping var reader = classDef.CreatePropertyReader(); reader.BeginRead(this); // read object using serializer serializer.ReadObject(reader, obj); // end property remapping classDef.ReleasePropertyReader(reader); // read dynamic properties if (classDef.Dynamic) { var dc = obj as PlayScript.IDynamicClass; string key = ReadString(); while (key != "") { var value = ReadNextObject(); if (dc != null) { dc.__SetDynamicValue(key, value); } key = ReadString(); } } return(obj); } }