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);
        }
Exemple #2
0
 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);
            }
        }
Exemple #5
0
            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;
            }
        }
Exemple #12
0
 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();
        }