public static void SerializeMember(IXRSerializable containerInstance, MemberInfo memberInfo, XRSerializer serializer)
        {
            var member = GetTypeDetailsFromMember(memberInfo);
            var name   = member.Item1;
            var type   = member.Item2;
            // Get Value
            var value = ReflectionHelper.GetMemberValue(containerInstance, name);

            if (typeof(IXRSerializable).IsAssignableFrom(type))
            {
                serializer.Serialize(name, value as IXRSerializable);
            }

            else if (type == typeof(string))
            {
                serializer.SerializeString(name, (string)value);
            }

            else if (type == typeof(Type))
            {
                var typeValue  = (Type)value;
                var typeString = (typeValue != null) ? typeValue.AssemblyQualifiedName : string.Empty;
                serializer.SerializeString(name, typeString);
            }

            // Other types here
        }
        public static void DeserializeMember(IXRSerializable containerInstance, MemberInfo memberInfo, XRSerializer serializer)
        {
            var    member = GetTypeDetailsFromMember(memberInfo);
            var    name   = member.Item1;
            var    type   = member.Item2;
            object value  = null;

            // If collection, Clear before deserializing
            var currentValue = ReflectionHelper.GetMemberValue(containerInstance, name);
            var collection   = currentValue as IList;

            if (collection != null && collection as IXRSerializable != null)
            {
                collection.Clear();
                serializer.Deserialize(name, collection as IXRSerializable);
                // Items have now been added to the collection.  Finished.
                return;
            }

            else if (typeof(IXRSerializable).IsAssignableFrom(type))
            {
                // must create object using parameterless constructor
                if (type.HasDefaultConstructor() == false)
                {
                    throw new MissingMethodException("A default constructor is required to deserialize IXRSerializable type: {0}".FormatString(type.ToString()));
                }

                value = Activator.CreateInstance(type);
                serializer.Deserialize(name, value as IXRSerializable);
            }

            else if (type == typeof(string))
            {
                value = serializer.DeserializeString(name, string.Empty);
            }

            else if (type == typeof(Type))
            {
                value = Type.GetType(serializer.DeserializeString(name, string.Empty), false);
            }

            // Set Value
            ReflectionHelper.SetMemberValue(containerInstance, name, value);
        }
        public static void SerializeMember(IXRSerializable containerInstance, MemberInfo memberInfo, XRSerializer serializer)
        {
            var member = GetTypeDetailsFromMember(memberInfo);
            var name = member.Item1;
            var type = member.Item2;
            // Get Value
            var value = ReflectionHelper.GetMemberValue(containerInstance, name);

            if (typeof(IXRSerializable).IsAssignableFrom(type))
                serializer.Serialize(name, value as IXRSerializable);

            else if (type == typeof(string))
                serializer.SerializeString(name, (string)value);

            else if (type == typeof(Type))
            {
                var typeValue = (Type)value;
                var typeString = (typeValue != null) ? typeValue.AssemblyQualifiedName : string.Empty;
                serializer.SerializeString(name, typeString);
            }

            // Other types here
        }
        public static void DeserializeMember(IXRSerializable containerInstance, MemberInfo memberInfo, XRSerializer serializer)
        {
            var member = GetTypeDetailsFromMember(memberInfo);
            var name = member.Item1;
            var type = member.Item2;
            object value = null;

            // If collection, Clear before deserializing
            var currentValue = ReflectionHelper.GetMemberValue(containerInstance, name);
            var collection = currentValue as IList;
            if (collection != null && collection as IXRSerializable != null)
            {
                collection.Clear();
                serializer.Deserialize(name, collection as IXRSerializable);
                // Items have now been added to the collection.  Finished.
                return;
            }

            else if (typeof(IXRSerializable).IsAssignableFrom(type))
            {
                // must create object using parameterless constructor
                if (type.HasDefaultConstructor() == false)
                    throw new MissingMethodException("A default constructor is required to deserialize IXRSerializable type: {0}".FormatString(type.ToString()));

                value = Activator.CreateInstance(type);
                serializer.Deserialize(name, value as IXRSerializable);
            }

            else if (type == typeof(string))
                value = serializer.DeserializeString(name, string.Empty);

            else if (type == typeof(Type))
                value = Type.GetType(serializer.DeserializeString(name, string.Empty), false);

            // Set Value
            ReflectionHelper.SetMemberValue(containerInstance, name, value);
        }