2 using System.Reflection;
4 namespace System.Runtime.Serialization
6 public class CodeInterpreter
9 internal static object ConvertValue(object arg, Type source, Type target)
11 return InternalConvert(arg, source, target, false);
15 static bool CanConvert (TypeCode typeCode)
19 case TypeCode.Boolean:
36 static object InternalConvert(object arg, Type source, Type target, bool isAddress)
41 if (target.IsValueType)
43 if (source.IsValueType)
45 if (!CanConvert (Type.GetTypeCode (target)))
46 throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializer.CreateSerializationException(SR.GetString(SR.NoConversionPossibleTo, DataContract.GetClrTypeFullName(target))));
50 else if (source.IsAssignableFrom(target))
53 throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializer.CreateSerializationException(SR.GetString(SR.IsNotAssignableFrom, DataContract.GetClrTypeFullName(target), DataContract.GetClrTypeFullName(source))));
55 else if (target.IsAssignableFrom(source))
57 else if (source.IsAssignableFrom(target))
59 else if (target.IsInterface || source.IsInterface)
62 throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializer.CreateSerializationException(SR.GetString(SR.IsNotAssignableFrom, DataContract.GetClrTypeFullName(target), DataContract.GetClrTypeFullName(source))));
65 public static object GetMember (MemberInfo memberInfo, object instance)
67 var pi = memberInfo as PropertyInfo;
69 return pi.GetValue (instance);
71 return ((FieldInfo) memberInfo).GetValue (instance);
74 public static void SetMember (MemberInfo memberInfo, object instance, object value)
76 var pi = memberInfo as PropertyInfo;
78 pi.SetValue (instance, value);
80 ((FieldInfo) memberInfo).SetValue (instance, value);