using System.Diagnostics;
using System.IO;
using System.Text;
-#if !MOONLIGHT
using System.Xml.Schema; // only required for NET_2_0 (SchemaInfo)
using System.Xml.Serialization; // only required for NET_2_0 (SchemaInfo)
using Mono.Xml.Schema; // only required for NET_2_0
-#endif
using Mono.Xml; // only required for NET_2_0
#if NET_4_5
using System.Threading;
public abstract ReadState ReadState { get; }
#if NET_2_0
-#if !MOONLIGHT
public virtual IXmlSchemaInfo SchemaInfo {
get { return null; }
}
-#endif
public virtual XmlReaderSettings Settings {
get { return settings; }
private static XmlReader CreateValidatingXmlReader (XmlReader reader, XmlReaderSettings settings)
{
-#if MOONLIGHT
- return reader;
-#else
XmlValidatingReader xvr = null;
switch (settings.ValidationType) {
// Auto and XDR are obsoleted in 2.0 and therefore ignored.
// throw new NotImplementedException ();
return xvr != null ? xvr : reader;
-#endif
}
-#if NET_4_0 || MOBILE
+#if NET_4_0
public void Dispose ()
#else
void IDisposable.Dispose()
#if NET_4_5
public virtual DateTimeOffset ReadContentAsDateTimeOffset ()
{
- return XmlConvert.ToDateTimeOffset (ReadContentString ());
+ try {
+ return XmlConvert.ToDateTimeOffset (ReadContentString ());
+ } catch (Exception e) {
+ throw XmlError ("Typed value is invalid.", e);
+ }
}
#endif
public virtual object ReadElementContentAs (Type returnType, IXmlNamespaceResolver namespaceResolver, string localName, string namespaceURI)
{
+ if (localName == null)
+ throw new ArgumentNullException ("localName");
+ if (namespaceURI == null)
+ throw new ArgumentNullException ("namespaceURI");
+
bool isEmpty = IsEmptyElement;
ReadStartElement (localName, namespaceURI);
if (isEmpty)
switch (Type.GetTypeCode (type)) {
case TypeCode.Boolean:
return XQueryConvert.StringToBoolean (text);
+ case TypeCode.Byte:
+ return XmlConvert.ToByte (text);
+ case TypeCode.SByte:
+ return XmlConvert.ToSByte (text);
+ case TypeCode.Int16:
+ return XmlConvert.ToInt16 (text);
+ case TypeCode.UInt16:
+ return XQueryConvert.StringToUnsignedShort (text);
+ case TypeCode.Int32:
+ return XQueryConvert.StringToInt (text);
+ case TypeCode.UInt32:
+ return XQueryConvert.StringToUnsignedInt (text);
+ case TypeCode.Int64:
+ return XQueryConvert.StringToInteger (text);
+ case TypeCode.UInt64:
+ return XQueryConvert.StringToUnsignedLong (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:
} 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));
+ throw new XmlException (String.Format ("Specified type '{0}' is not supported.", type));
}
public virtual bool ReadElementContentAsBoolean ()