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));
}