private object ReadStructTypeValue(RSBinaryReader _binaryReader, out Type _objectType, object _object) { // Get object type UInt32 _typeID = _binaryReader.ReadUInt32(); _objectType = TypeMetadata.GetType(_typeID); // Read object refernece Dictionary <string, RuntimeSerializationEntry> _initValuesContainer = new Dictionary <string, RuntimeSerializationEntry>(); Dictionary <string, RuntimeSerializationEntry> _serValuesContainer = new Dictionary <string, RuntimeSerializationEntry>(); RuntimeSerializationInfo _serializationInfo = new RuntimeSerializationInfo(_objectType, _initValuesContainer, _serValuesContainer); // Read initializers and properties ReadSerializationContainer(_binaryReader, ref _initValuesContainer); ReadSerializationContainer(_binaryReader, ref _serValuesContainer); if (_object == null) { _object = CreateInstance(_binaryReader, _serializationInfo); } // Set object value _object = SetObjectData(_object, _serializationInfo); // Trigger deserialization callback if (typeof(IRuntimeSerializationCallback).IsAssignableFrom(_objectType)) { ((IRuntimeSerializationCallback)_object).OnAfterRuntimeDeserialize(); } return(_object); }
public void WriteSerializationData(RuntimeSerializationInfo _info) { _info.AddValue <string>("string", stringField); _info.AddValue <int>("int", intField); _info.AddValue <float>("float", floatField); _info.AddValue <DateTime>("date-time", dateTimeField); }
public void WriteSerializationData(RuntimeSerializationInfo _info) { _info.AddValue<string>("string", stringField); _info.AddValue<int>("int", intField); _info.AddValue<float>("float", floatField); _info.AddValue<DateTime>("date-time", dateTimeField); }
private void GetObjectDataUsingReflection(object _object, Type _objectType, ref RuntimeSerializationInfo _serializationInfo, RuntimeSerializableAttribute _serializableAttr) { List <Field> _serializableFields = SerializationTypeUtil.GetRuntimeSerializableFields(_objectType, _serializableAttr); int _serializableFieldCount = _serializableFields.Count; // Iterate through all serialisable fields for (int _iter = 0; _iter < _serializableFieldCount; _iter++) { Field _curField = _serializableFields[_iter]; FieldInfo _curFieldInfo = _curField.Info; object _curFieldValue; if (_curFieldInfo.IsStatic) { _curFieldValue = _curFieldInfo.GetValue(null); } else { _curFieldValue = _curFieldInfo.GetValue(_object); } // Add this field info _serializationInfo.AddValue(_curFieldInfo.Name, _curFieldValue, _curFieldInfo.FieldType, _curField.IsObjectInitializer); } }
public object ReadSerializationData(RuntimeSerializationInfo _info) { stringField = _info.GetValue <string>("string"); intField = _info.GetValue <int>("int"); floatField = _info.GetValue <float>("float"); dateTimeField = _info.GetValue <DateTime>("date-time"); return(this); }
public object ReadSerializationData(RuntimeSerializationInfo _info) { stringField = _info.GetValue<string>("string"); intField = _info.GetValue<int>("int"); floatField = _info.GetValue<float>("float"); dateTimeField = _info.GetValue<DateTime>("date-time"); return this; }
private void WriteObjectGraph(RSBinaryWriter _binaryWriter, object _object, Type _objectType) { // Fetch properties that needs to be serialized RuntimeSerializationInfo _serializationInfo = new RuntimeSerializationInfo(_objectType); // Get serialization entries for this object GetObjectData(_object, ref _serializationInfo); // Write initializers, properties WriteSerializationContainer(_binaryWriter, _serializationInfo.InitializerValuesContainer); WriteSerializationContainer(_binaryWriter, _serializationInfo.SerializedValuesContainer); // Trigger serialization finished callback if (typeof(IRuntimeSerializationCallback).IsAssignableFrom(_objectType)) { ((IRuntimeSerializationCallback)_object).OnAfterRuntimeSerialize(); } }
private object CreateInstance(RSBinaryReader _binaryReader, RuntimeSerializationInfo _serilizationInfo) { Type _objectType = _serilizationInfo.ObjectType; RuntimeSerializableAttribute _serializableAttr = SerializationTypeUtil.GetRuntimeSerializableAttribute(_objectType); if (_serializableAttr != null) { if (typeof(IRuntimeSerializableActivator).IsAssignableFrom(_objectType)) { MethodInfo _staticInstanceCreator = _objectType.GetMethod("CreateInstance", BindingFlags.Public | BindingFlags.Static); if (_staticInstanceCreator != null) return _staticInstanceCreator.Invoke(null, new object[] { _serilizationInfo }); } } // Fallback condition return Activator.CreateInstance(_objectType); }
private void GetObjectData(object _object, ref RuntimeSerializationInfo _serializationInfo) { Type _objectType = _serializationInfo.ObjectType; RuntimeSerializableAttribute _serializableAttr = SerializationTypeUtil.GetRuntimeSerializableAttribute(_objectType); if (_serializableAttr != null) { // Serialization is controlled by user if (typeof(IRuntimeSerializable).IsAssignableFrom(_objectType)) { ((IRuntimeSerializable)_object).WriteSerializationData(_serializationInfo); } // Serialization using Reflection else { Type _curObjectType = _objectType; while (true) { // Gather information about all the fields to be deserialized if (_serializableAttr != null) { GetObjectDataUsingReflection(_object, _curObjectType, ref _serializationInfo, _serializableAttr); } // Tranverse to object's base and check for termiation condition _curObjectType = _curObjectType.BaseType; if (_curObjectType == null) { break; } // Get base type's attribute _serializableAttr = SerializationTypeUtil.GetRuntimeSerializableAttribute(_curObjectType); } } return; } }
private object CreateInstance(RSBinaryReader _binaryReader, RuntimeSerializationInfo _serilizationInfo) { Type _objectType = _serilizationInfo.ObjectType; RuntimeSerializableAttribute _serializableAttr = SerializationTypeUtil.GetRuntimeSerializableAttribute(_objectType); if (_serializableAttr != null) { if (typeof(IRuntimeSerializableActivator).IsAssignableFrom(_objectType)) { MethodInfo _staticInstanceCreator = _objectType.GetMethod("CreateInstance", BindingFlags.Public | BindingFlags.Static); if (_staticInstanceCreator != null) { return(_staticInstanceCreator.Invoke(null, new object[] { _serilizationInfo })); } } } // Fallback condition return(Activator.CreateInstance(_objectType)); }
private void GetObjectData(object _object, ref RuntimeSerializationInfo _serializationInfo) { Type _objectType = _serializationInfo.ObjectType; RuntimeSerializableAttribute _serializableAttr = SerializationTypeUtil.GetRuntimeSerializableAttribute(_objectType); if (_serializableAttr != null) { // Serialization is controlled by user if (typeof(IRuntimeSerializable).IsAssignableFrom(_objectType)) { ((IRuntimeSerializable)_object).WriteSerializationData(_serializationInfo); } // Serialization using Reflection else { Type _curObjectType = _objectType; while (true) { // Gather information about all the fields to be deserialized if (_serializableAttr != null) GetObjectDataUsingReflection(_object, _curObjectType, ref _serializationInfo, _serializableAttr); // Tranverse to object's base and check for termiation condition _curObjectType = _curObjectType.BaseType; if (_curObjectType == null) break; // Get base type's attribute _serializableAttr = SerializationTypeUtil.GetRuntimeSerializableAttribute(_curObjectType); } } return; } }
public static object CreateInstance(RuntimeSerializationInfo _info) { return(new IRuntimeSerializableSample()); }
public static object CreateInstance(RuntimeSerializationInfo _info) { return new IRuntimeSerializableSample(); }
private object ReadClassTypeValue(RSBinaryReader _binaryReader, out Type _objectType, object _object) { // Read properties UInt32 _typeID = _binaryReader.ReadUInt32(); UInt32 _objectReferenceID = _binaryReader.ReadUInt32(); // Get object type _objectType = TypeMetadata.GetType(_typeID); // Read object refernece Dictionary<string, RuntimeSerializationEntry> _initValuesContainer = new Dictionary<string, RuntimeSerializationEntry>(); Dictionary<string, RuntimeSerializationEntry> _serValuesContainer = new Dictionary<string, RuntimeSerializationEntry>(); RuntimeSerializationInfo _serializationInfo = new RuntimeSerializationInfo(_objectType, _initValuesContainer, _serValuesContainer); // Read initializers and create instance, if required ReadSerializationContainer(_binaryReader, ref _initValuesContainer); if (_object == null) _object = CreateInstance(_binaryReader, _serializationInfo); ObjectReferenceCache.Add(_object, _objectReferenceID); // Read properties ReadSerializationContainer(_binaryReader, ref _serValuesContainer); // Set object value _object = SetObjectData(_object, _serializationInfo); // Trigger deserialization callback if (typeof(IRuntimeSerializationCallback).IsAssignableFrom(_objectType)) ((IRuntimeSerializationCallback)_object).OnAfterRuntimeDeserialize(); return _object; }
private object SetObjectDataUsingReflection(object _object, Type _objectType, RuntimeSerializationInfo _serializationInfo, RuntimeSerializableAttribute _serializableAttr) { List<Field> _serializableFields = SerializationTypeUtil.GetRuntimeSerializableFields(_objectType, _serializableAttr); int _serializableFieldCount = _serializableFields.Count; // Iterate through all serialisable fields for (int _iter = 0; _iter < _serializableFieldCount; _iter++) { Field _curField = _serializableFields[_iter]; FieldInfo _curFieldInfo = _curField.Info; object _curFieldValue = _serializationInfo.GetValue(_curFieldInfo.Name, _curFieldInfo.FieldType, _curField.IsObjectInitializer); // Set this new value if (_curFieldInfo.IsStatic) _curFieldInfo.SetValue(null, _curFieldValue); else _curFieldInfo.SetValue(_object, _curFieldValue); } return _object; }
private void WriteObjectGraph(RSBinaryWriter _binaryWriter, object _object, Type _objectType) { // Fetch properties that needs to be serialized RuntimeSerializationInfo _serializationInfo = new RuntimeSerializationInfo(_objectType); // Get serialization entries for this object GetObjectData(_object, ref _serializationInfo); // Write initializers, properties WriteSerializationContainer(_binaryWriter, _serializationInfo.InitializerValuesContainer); WriteSerializationContainer(_binaryWriter, _serializationInfo.SerializedValuesContainer); // Trigger serialization finished callback if (typeof(IRuntimeSerializationCallback).IsAssignableFrom(_objectType)) ((IRuntimeSerializationCallback)_object).OnAfterRuntimeSerialize(); }