private object ValueAs(string text, Type type, IXmlNamespaceResolver resolver)
{
try {
if (type == typeof(object))
{
return(text);
}
if (type == typeof(XmlQualifiedName))
{
if (resolver != null)
{
return(XmlQualifiedName.Parse(text, resolver));
}
else
{
return(XmlQualifiedName.Parse(text, this));
}
}
if (type == typeof(DateTimeOffset))
{
return(XmlConvert.ToDateTimeOffset(text));
}
switch (Type.GetTypeCode(type))
{
case TypeCode.Boolean:
return(XQueryConvert.StringToBoolean(text));
case TypeCode.DateTime:
return(XQueryConvert.StringToDateTime(text));
case TypeCode.Decimal:
return(XQueryConvert.StringToDecimal(text));
case TypeCode.Double:
return(XQueryConvert.StringToDouble(text));
case TypeCode.Int32:
return(XQueryConvert.StringToInt(text));
case TypeCode.Int64:
return(XQueryConvert.StringToInteger(text));
case TypeCode.Single:
return(XQueryConvert.StringToFloat(text));
case TypeCode.String:
return(text);
}
} catch (Exception ex) {
throw XmlError(String.Format("Current text value '{0}' is not acceptable for specified type '{1}'. {2}", text, type, ex != null ? ex.Message : String.Empty), ex);
}
throw new ArgumentException(String.Format("Specified type '{0}' is not supported.", type));
}