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));
        }