XmlSerializableReader.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / Serialization / System / Runtime / Serialization / XmlSerializableReader.cs / 1305376 / XmlSerializableReader.cs

                            //------------------------------------------------------------------------------ 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------------------------
namespace System.Runtime.Serialization
{ 
    using System.IO;
    using System.Xml; 
    using System.Xml.Schema; 
    using System.Xml.Serialization;
    using System.Diagnostics; 

    internal class XmlSerializableReader : XmlReader, IXmlLineInfo, IXmlTextParser
    {
        XmlReaderDelegator xmlReader; 
        int startDepth;
        bool isRootEmptyElement; 
        XmlReader innerReader; 

        XmlReader InnerReader 
        {
            get { return innerReader; }
        }
 
        internal void BeginRead(XmlReaderDelegator xmlReader)
        { 
            if (xmlReader.NodeType != XmlNodeType.Element) 
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializerReadContext.CreateUnexpectedStateException(XmlNodeType.Element, xmlReader));
            this.xmlReader = xmlReader; 
            this.startDepth = xmlReader.Depth;
            this.innerReader = xmlReader.UnderlyingReader;
            this.isRootEmptyElement = InnerReader.IsEmptyElement;
        } 

        internal void EndRead() 
        { 
            if (isRootEmptyElement)
                xmlReader.Read(); 
            else
            {
                if (xmlReader.IsStartElement() && xmlReader.Depth == startDepth)
                    xmlReader.Read(); 
                while (xmlReader.Depth > startDepth)
                { 
                    if (!xmlReader.Read()) 
                        throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializerReadContext.CreateUnexpectedStateException(XmlNodeType.EndElement, xmlReader));
                } 
            }
        }

        public override bool Read() 
        {
            XmlReader reader = this.InnerReader; 
            if ( reader.Depth == startDepth ) 
            {
                if ( reader.NodeType == XmlNodeType.EndElement || 
                     ( reader.NodeType == XmlNodeType.Element && reader.IsEmptyElement ) ) {
                    return false;
                }
            } 
            return reader.Read();
        } 
 
        public override void Close()
        { 
            throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializer.CreateSerializationException(SR.GetString(SR.IXmlSerializableIllegalOperation)));
        }

        public override XmlReaderSettings Settings { get { return InnerReader.Settings; } } 
        public override XmlNodeType NodeType { get { return InnerReader.NodeType; } }
        public override string Name { get { return InnerReader.Name; } } 
        public override string LocalName { get { return InnerReader.LocalName; } } 
        public override string NamespaceURI { get { return InnerReader.NamespaceURI; } }
        public override string Prefix { get { return InnerReader.Prefix; } } 
        public override bool HasValue { get { return InnerReader.HasValue; } }
        public override string Value { get { return InnerReader.Value; } }
        public override int Depth { get { return InnerReader.Depth; } }
        public override string BaseURI { get { return InnerReader.BaseURI; } } 
        public override bool IsEmptyElement { get { return InnerReader.IsEmptyElement; } }
        public override bool IsDefault { get { return InnerReader.IsDefault; } } 
        public override char QuoteChar { get { return InnerReader.QuoteChar; } } 
        public override XmlSpace XmlSpace { get { return InnerReader.XmlSpace; } }
        public override string XmlLang { get { return InnerReader.XmlLang; } } 
        public override IXmlSchemaInfo SchemaInfo { get { return InnerReader.SchemaInfo; } }
        public override Type ValueType { get { return InnerReader.ValueType; } }
        public override int AttributeCount { get { return InnerReader.AttributeCount; } }
        public override string this[int i] { get { return InnerReader[i]; } } 
        public override string this[string name] { get { return InnerReader[name]; } }
        public override string this[string name, string namespaceURI] { get { return InnerReader[name, namespaceURI]; } } 
        public override bool EOF { get { return InnerReader.EOF; } } 
        public override ReadState ReadState { get { return InnerReader.ReadState; } }
        public override XmlNameTable NameTable { get { return InnerReader.NameTable; } } 
        public override bool CanResolveEntity { get { return InnerReader.CanResolveEntity; } }
        public override bool CanReadBinaryContent { get { return InnerReader.CanReadBinaryContent; } }
        public override bool CanReadValueChunk { get { return InnerReader.CanReadValueChunk; } }
        public override bool HasAttributes { get { return InnerReader.HasAttributes; } } 

        public override string GetAttribute(string name) { return InnerReader.GetAttribute(name); } 
        public override string GetAttribute(string name, string namespaceURI) { return InnerReader.GetAttribute(name, namespaceURI); } 
        public override string GetAttribute(int i) { return InnerReader.GetAttribute(i); }
        public override bool MoveToAttribute(string name) { return InnerReader.MoveToAttribute(name); } 
        public override bool MoveToAttribute(string name, string ns) { return InnerReader.MoveToAttribute(name, ns); }
        public override void MoveToAttribute(int i) { InnerReader.MoveToAttribute(i); }
        public override bool MoveToFirstAttribute() { return InnerReader.MoveToFirstAttribute(); }
        public override bool MoveToNextAttribute() { return InnerReader.MoveToNextAttribute(); } 
        public override bool MoveToElement() { return InnerReader.MoveToElement(); }
        public override string LookupNamespace(string prefix) { return InnerReader.LookupNamespace(prefix); } 
        public override bool ReadAttributeValue() { return InnerReader.ReadAttributeValue(); } 
        public override void ResolveEntity() { InnerReader.ResolveEntity(); }
        public override bool IsStartElement() { return InnerReader.IsStartElement(); } 
        public override bool IsStartElement(string name) { return InnerReader.IsStartElement(name); }
        public override bool IsStartElement(string localname, string ns) { return InnerReader.IsStartElement(localname, ns); }
        public override XmlNodeType MoveToContent() { return InnerReader.MoveToContent(); }
 
        public override object ReadContentAsObject() { return InnerReader.ReadContentAsObject(); }
        public override bool ReadContentAsBoolean() { return InnerReader.ReadContentAsBoolean(); } 
        public override DateTime ReadContentAsDateTime() { return InnerReader.ReadContentAsDateTime(); } 
        public override double ReadContentAsDouble() { return InnerReader.ReadContentAsDouble(); }
        public override int ReadContentAsInt() { return InnerReader.ReadContentAsInt(); } 
        public override long ReadContentAsLong() { return InnerReader.ReadContentAsLong(); }
        public override string ReadContentAsString() { return InnerReader.ReadContentAsString(); }
        public override object ReadContentAs(Type returnType, IXmlNamespaceResolver namespaceResolver) { return InnerReader.ReadContentAs(returnType, namespaceResolver); }
        public override int ReadContentAsBase64(byte[] buffer, int index, int count) { return InnerReader.ReadContentAsBase64(buffer, index, count); } 
        public override int ReadContentAsBinHex(byte[] buffer, int index, int count) { return InnerReader.ReadContentAsBinHex(buffer, index, count); }
        public override int ReadValueChunk(char[] buffer, int index, int count) { return InnerReader.ReadValueChunk(buffer, index, count); } 
        public override string ReadString() { return InnerReader.ReadString(); } 

        // IXmlTextParser members 
        bool IXmlTextParser.Normalized
        {
            get
            { 
                IXmlTextParser xmlTextParser = InnerReader as IXmlTextParser;
                return (xmlTextParser == null) ? xmlReader.Normalized : xmlTextParser.Normalized; 
            } 
            set
            { 
                IXmlTextParser xmlTextParser = InnerReader as IXmlTextParser;
                if (xmlTextParser == null)
                    xmlReader.Normalized = value;
                else 
                    xmlTextParser.Normalized = value;
            } 
        } 

        WhitespaceHandling IXmlTextParser.WhitespaceHandling 
        {
            get
            {
                IXmlTextParser xmlTextParser = InnerReader as IXmlTextParser; 
                return (xmlTextParser == null) ? xmlReader.WhitespaceHandling : xmlTextParser.WhitespaceHandling;
            } 
            set 
            {
                IXmlTextParser xmlTextParser = InnerReader as IXmlTextParser; 
                if (xmlTextParser == null)
                    xmlReader.WhitespaceHandling = value;
                else
                    xmlTextParser.WhitespaceHandling = value; 
            }
        } 
 
        // IXmlLineInfo members
        bool IXmlLineInfo.HasLineInfo() 
        {
            IXmlLineInfo xmlLineInfo = InnerReader as IXmlLineInfo;
            return (xmlLineInfo == null) ? xmlReader.HasLineInfo() : xmlLineInfo.HasLineInfo();
        } 

        int IXmlLineInfo.LineNumber 
        { 
            get
            { 
                IXmlLineInfo xmlLineInfo = InnerReader as IXmlLineInfo;
                return (xmlLineInfo == null) ? xmlReader.LineNumber : xmlLineInfo.LineNumber;
            }
        } 

        int IXmlLineInfo.LinePosition 
        { 
            get
            { 
                IXmlLineInfo xmlLineInfo = InnerReader as IXmlLineInfo;
                return (xmlLineInfo == null) ? xmlReader.LinePosition : xmlLineInfo.LinePosition;
            }
        } 
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------ 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------------------------
namespace System.Runtime.Serialization
{ 
    using System.IO;
    using System.Xml; 
    using System.Xml.Schema; 
    using System.Xml.Serialization;
    using System.Diagnostics; 

    internal class XmlSerializableReader : XmlReader, IXmlLineInfo, IXmlTextParser
    {
        XmlReaderDelegator xmlReader; 
        int startDepth;
        bool isRootEmptyElement; 
        XmlReader innerReader; 

        XmlReader InnerReader 
        {
            get { return innerReader; }
        }
 
        internal void BeginRead(XmlReaderDelegator xmlReader)
        { 
            if (xmlReader.NodeType != XmlNodeType.Element) 
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializerReadContext.CreateUnexpectedStateException(XmlNodeType.Element, xmlReader));
            this.xmlReader = xmlReader; 
            this.startDepth = xmlReader.Depth;
            this.innerReader = xmlReader.UnderlyingReader;
            this.isRootEmptyElement = InnerReader.IsEmptyElement;
        } 

        internal void EndRead() 
        { 
            if (isRootEmptyElement)
                xmlReader.Read(); 
            else
            {
                if (xmlReader.IsStartElement() && xmlReader.Depth == startDepth)
                    xmlReader.Read(); 
                while (xmlReader.Depth > startDepth)
                { 
                    if (!xmlReader.Read()) 
                        throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializerReadContext.CreateUnexpectedStateException(XmlNodeType.EndElement, xmlReader));
                } 
            }
        }

        public override bool Read() 
        {
            XmlReader reader = this.InnerReader; 
            if ( reader.Depth == startDepth ) 
            {
                if ( reader.NodeType == XmlNodeType.EndElement || 
                     ( reader.NodeType == XmlNodeType.Element && reader.IsEmptyElement ) ) {
                    return false;
                }
            } 
            return reader.Read();
        } 
 
        public override void Close()
        { 
            throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializer.CreateSerializationException(SR.GetString(SR.IXmlSerializableIllegalOperation)));
        }

        public override XmlReaderSettings Settings { get { return InnerReader.Settings; } } 
        public override XmlNodeType NodeType { get { return InnerReader.NodeType; } }
        public override string Name { get { return InnerReader.Name; } } 
        public override string LocalName { get { return InnerReader.LocalName; } } 
        public override string NamespaceURI { get { return InnerReader.NamespaceURI; } }
        public override string Prefix { get { return InnerReader.Prefix; } } 
        public override bool HasValue { get { return InnerReader.HasValue; } }
        public override string Value { get { return InnerReader.Value; } }
        public override int Depth { get { return InnerReader.Depth; } }
        public override string BaseURI { get { return InnerReader.BaseURI; } } 
        public override bool IsEmptyElement { get { return InnerReader.IsEmptyElement; } }
        public override bool IsDefault { get { return InnerReader.IsDefault; } } 
        public override char QuoteChar { get { return InnerReader.QuoteChar; } } 
        public override XmlSpace XmlSpace { get { return InnerReader.XmlSpace; } }
        public override string XmlLang { get { return InnerReader.XmlLang; } } 
        public override IXmlSchemaInfo SchemaInfo { get { return InnerReader.SchemaInfo; } }
        public override Type ValueType { get { return InnerReader.ValueType; } }
        public override int AttributeCount { get { return InnerReader.AttributeCount; } }
        public override string this[int i] { get { return InnerReader[i]; } } 
        public override string this[string name] { get { return InnerReader[name]; } }
        public override string this[string name, string namespaceURI] { get { return InnerReader[name, namespaceURI]; } } 
        public override bool EOF { get { return InnerReader.EOF; } } 
        public override ReadState ReadState { get { return InnerReader.ReadState; } }
        public override XmlNameTable NameTable { get { return InnerReader.NameTable; } } 
        public override bool CanResolveEntity { get { return InnerReader.CanResolveEntity; } }
        public override bool CanReadBinaryContent { get { return InnerReader.CanReadBinaryContent; } }
        public override bool CanReadValueChunk { get { return InnerReader.CanReadValueChunk; } }
        public override bool HasAttributes { get { return InnerReader.HasAttributes; } } 

        public override string GetAttribute(string name) { return InnerReader.GetAttribute(name); } 
        public override string GetAttribute(string name, string namespaceURI) { return InnerReader.GetAttribute(name, namespaceURI); } 
        public override string GetAttribute(int i) { return InnerReader.GetAttribute(i); }
        public override bool MoveToAttribute(string name) { return InnerReader.MoveToAttribute(name); } 
        public override bool MoveToAttribute(string name, string ns) { return InnerReader.MoveToAttribute(name, ns); }
        public override void MoveToAttribute(int i) { InnerReader.MoveToAttribute(i); }
        public override bool MoveToFirstAttribute() { return InnerReader.MoveToFirstAttribute(); }
        public override bool MoveToNextAttribute() { return InnerReader.MoveToNextAttribute(); } 
        public override bool MoveToElement() { return InnerReader.MoveToElement(); }
        public override string LookupNamespace(string prefix) { return InnerReader.LookupNamespace(prefix); } 
        public override bool ReadAttributeValue() { return InnerReader.ReadAttributeValue(); } 
        public override void ResolveEntity() { InnerReader.ResolveEntity(); }
        public override bool IsStartElement() { return InnerReader.IsStartElement(); } 
        public override bool IsStartElement(string name) { return InnerReader.IsStartElement(name); }
        public override bool IsStartElement(string localname, string ns) { return InnerReader.IsStartElement(localname, ns); }
        public override XmlNodeType MoveToContent() { return InnerReader.MoveToContent(); }
 
        public override object ReadContentAsObject() { return InnerReader.ReadContentAsObject(); }
        public override bool ReadContentAsBoolean() { return InnerReader.ReadContentAsBoolean(); } 
        public override DateTime ReadContentAsDateTime() { return InnerReader.ReadContentAsDateTime(); } 
        public override double ReadContentAsDouble() { return InnerReader.ReadContentAsDouble(); }
        public override int ReadContentAsInt() { return InnerReader.ReadContentAsInt(); } 
        public override long ReadContentAsLong() { return InnerReader.ReadContentAsLong(); }
        public override string ReadContentAsString() { return InnerReader.ReadContentAsString(); }
        public override object ReadContentAs(Type returnType, IXmlNamespaceResolver namespaceResolver) { return InnerReader.ReadContentAs(returnType, namespaceResolver); }
        public override int ReadContentAsBase64(byte[] buffer, int index, int count) { return InnerReader.ReadContentAsBase64(buffer, index, count); } 
        public override int ReadContentAsBinHex(byte[] buffer, int index, int count) { return InnerReader.ReadContentAsBinHex(buffer, index, count); }
        public override int ReadValueChunk(char[] buffer, int index, int count) { return InnerReader.ReadValueChunk(buffer, index, count); } 
        public override string ReadString() { return InnerReader.ReadString(); } 

        // IXmlTextParser members 
        bool IXmlTextParser.Normalized
        {
            get
            { 
                IXmlTextParser xmlTextParser = InnerReader as IXmlTextParser;
                return (xmlTextParser == null) ? xmlReader.Normalized : xmlTextParser.Normalized; 
            } 
            set
            { 
                IXmlTextParser xmlTextParser = InnerReader as IXmlTextParser;
                if (xmlTextParser == null)
                    xmlReader.Normalized = value;
                else 
                    xmlTextParser.Normalized = value;
            } 
        } 

        WhitespaceHandling IXmlTextParser.WhitespaceHandling 
        {
            get
            {
                IXmlTextParser xmlTextParser = InnerReader as IXmlTextParser; 
                return (xmlTextParser == null) ? xmlReader.WhitespaceHandling : xmlTextParser.WhitespaceHandling;
            } 
            set 
            {
                IXmlTextParser xmlTextParser = InnerReader as IXmlTextParser; 
                if (xmlTextParser == null)
                    xmlReader.WhitespaceHandling = value;
                else
                    xmlTextParser.WhitespaceHandling = value; 
            }
        } 
 
        // IXmlLineInfo members
        bool IXmlLineInfo.HasLineInfo() 
        {
            IXmlLineInfo xmlLineInfo = InnerReader as IXmlLineInfo;
            return (xmlLineInfo == null) ? xmlReader.HasLineInfo() : xmlLineInfo.HasLineInfo();
        } 

        int IXmlLineInfo.LineNumber 
        { 
            get
            { 
                IXmlLineInfo xmlLineInfo = InnerReader as IXmlLineInfo;
                return (xmlLineInfo == null) ? xmlReader.LineNumber : xmlLineInfo.LineNumber;
            }
        } 

        int IXmlLineInfo.LinePosition 
        { 
            get
            { 
                IXmlLineInfo xmlLineInfo = InnerReader as IXmlLineInfo;
                return (xmlLineInfo == null) ? xmlReader.LinePosition : xmlLineInfo.LinePosition;
            }
        } 
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.

                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK