internal static object StringToObject(Type type, string value)
{
if (value == null || value == String.Empty)
{
return(DBNull.Value);
}
switch (Type.GetTypeCode(type))
{
case TypeCode.Boolean: return(XmlConvert.ToBoolean(value));
case TypeCode.Byte: return(XmlConvert.ToByte(value));
case TypeCode.Char: return((char)XmlConvert.ToInt32(value));
#if NET_2_0
case TypeCode.DateTime: return(XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.Unspecified));
#else
case TypeCode.DateTime: return(XmlConvert.ToDateTime(value));
#endif
case TypeCode.Decimal: return(XmlConvert.ToDecimal(value));
case TypeCode.Double: return(XmlConvert.ToDouble(value));
case TypeCode.Int16: return(XmlConvert.ToInt16(value));
case TypeCode.Int32: return(XmlConvert.ToInt32(value));
case TypeCode.Int64: return(XmlConvert.ToInt64(value));
case TypeCode.SByte: return(XmlConvert.ToSByte(value));
case TypeCode.Single: return(XmlConvert.ToSingle(value));
case TypeCode.UInt16: return(XmlConvert.ToUInt16(value));
case TypeCode.UInt32: return(XmlConvert.ToUInt32(value));
case TypeCode.UInt64: return(XmlConvert.ToUInt64(value));
}
if (type == typeof(TimeSpan))
{
return(XmlConvert.ToTimeSpan(value));
}
if (type == typeof(Guid))
{
return(XmlConvert.ToGuid(value));
}
if (type == typeof(byte[]))
{
return(Convert.FromBase64String(value));
}
return(Convert.ChangeType(value, type));
}