System.Xml.Serialization.XmlSerializationWriterInterpreter.ImplicitConvert C# (CSharp) Method

ImplicitConvert() private method

private ImplicitConvert ( object obj, Type type ) : object
obj object
type System.Type
return object
		object ImplicitConvert (object obj, Type type)
		{
			if (obj == null)
				return null;
			for (Type t = type; t != typeof (object); t = t.BaseType) {
				MethodInfo mi = t.GetMethod ("op_Implicit", new Type [] {t});
				if (mi != null && mi.ReturnType.IsAssignableFrom (obj.GetType ()))
					return mi.Invoke (null, new object [] {obj});
			}

			for (Type t = obj.GetType (); t != typeof (object); t = t.BaseType) {
				MethodInfo mi = t.GetMethod ("op_Implicit", new Type [] {t});
				if (mi != null && mi.ReturnType == type)
					return mi.Invoke (null, new object [] {obj});
			}
			return obj;
		}

Usage Example

        void SetMemberValue(XmlTypeMapMember member, object ob, object value, bool isValueList)
        {
            var memberType = member.TypeData.Type;

            if (value != null && !value.GetType().IsAssignableFrom(memberType))
            {
                value = XmlSerializationWriterInterpreter.ImplicitConvert(value, memberType);
            }

            if (isValueList)
            {
                ((object[])ob)[member.GlobalIndex] = value;
            }
            else
            {
                member.SetValue(ob, value);
            }
            if (member.IsOptionalValueType)
            {
                member.SetValueSpecified(ob, true);
            }
        }