private ClassDataNode ReadUnknownClassData(XmlReaderDelegator xmlReader, string?dataContractName, string?dataContractNamespace)
        {
            var dataNode = new ClassDataNode();

            InitializeExtensionDataNode(dataNode, dataContractName, dataContractNamespace);

            int         memberIndex = 0;
            XmlNodeType nodeType;

            while ((nodeType = xmlReader.MoveToContent()) != XmlNodeType.EndElement)
            {
                if (nodeType != XmlNodeType.Element)
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(CreateUnexpectedStateException(XmlNodeType.Element, xmlReader));
                }

                if (dataNode.Members == null)
                {
                    dataNode.Members = new List <ExtensionDataMember>();
                }
                dataNode.Members.Add(ReadExtensionDataMember(xmlReader, memberIndex++));
            }
            xmlReader.ReadEndElement();
            return(dataNode);
        }
 private void WriteExtensionClassData(XmlWriterDelegator xmlWriter, ClassDataNode dataNode)
 {
     if (!this.TryWriteDeserializedExtensionData(xmlWriter, dataNode))
     {
         this.WriteExtensionDataTypeInfo(xmlWriter, dataNode);
         IList <ExtensionDataMember> members = dataNode.Members;
         if (members != null)
         {
             for (int i = 0; i < members.Count; i++)
             {
                 this.WriteExtensionDataMember(xmlWriter, members[i]);
             }
         }
     }
 }
 private void MoveNextInClass(ClassDataNode dataNode)
 {
     if ((dataNode.Members != null) && (this.element.childElementIndex < dataNode.Members.Count))
     {
         if (this.element.childElementIndex == 0)
         {
             this.context.IncrementItemCount(-dataNode.Members.Count);
         }
         ExtensionDataMember member = dataNode.Members[this.element.childElementIndex++];
         this.SetNextElement(member.Value, member.Name, member.Namespace, GetPrefix(member.Namespace));
     }
     else
     {
         this.internalNodeType          = ExtensionDataNodeType.EndElement;
         this.element.childElementIndex = 0;
     }
 }