System.Runtime.Serialization.XmlObjectSerializer.IsRootElement C# (CSharp) Method

IsRootElement() private method

private IsRootElement ( System.Runtime.Serialization.XmlReaderDelegator reader, System.Runtime.Serialization.DataContract contract, XmlDictionaryString name, XmlDictionaryString ns ) : bool
reader System.Runtime.Serialization.XmlReaderDelegator
contract System.Runtime.Serialization.DataContract
name System.Xml.XmlDictionaryString
ns System.Xml.XmlDictionaryString
return bool
        internal bool IsRootElement(XmlReaderDelegator reader, DataContract contract, XmlDictionaryString name, XmlDictionaryString ns)
        {
            reader.MoveToElement();
            if (name != null) // root name set explicitly
            {
                return reader.IsStartElement(name, ns);
            }
            else
            {
                if (!contract.HasRoot)
                    return reader.IsStartElement();

                if (reader.IsStartElement(contract.TopLevelElementName, contract.TopLevelElementNamespace))
                    return true;

                ClassDataContract classContract = contract as ClassDataContract;
                if (classContract != null)
                    classContract = classContract.BaseContract;
                while (classContract != null)
                {
                    if (reader.IsStartElement(classContract.TopLevelElementName, classContract.TopLevelElementNamespace))
                        return true;
                    classContract = classContract.BaseContract;
                }
                if (classContract == null)
                {
                    DataContract objectContract = PrimitiveDataContract.GetPrimitiveDataContract(Globals.TypeOfObject);
                    if (reader.IsStartElement(objectContract.TopLevelElementName, objectContract.TopLevelElementNamespace))
                        return true;
                }
                return false;
            }
        }