System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadMessage C# (CSharp) Method

ReadMessage() protected method

protected ReadMessage ( XmlMembersMapping typeMap ) : object
typeMap XmlMembersMapping
return object
		protected virtual object ReadMessage (XmlMembersMapping typeMap)
		{
			object[] parameters = new object[typeMap.Count];

			if (typeMap.HasWrapperElement)
			{
				// bug #79988: out parameters need to be initialized if they 
				// are value types
				ArrayList members = ((ClassMap) typeMap.ObjectMap).AllMembers;
				for (int n = 0; n < members.Count; n++) {
					XmlTypeMapMember mem = (XmlTypeMapMember) members [n];
					if (!mem.IsReturnValue && mem.TypeData.IsValueType)
						SetMemberValueFromAttr (mem, parameters, CreateInstance (
							mem.TypeData.Type), true);
				}

				if (_format == SerializationFormat.Encoded)
				{
					while (Reader.NodeType == System.Xml.XmlNodeType.Element)
					{
						string root = Reader.GetAttribute ("root", XmlSerializer.EncodingNamespace);
						if (root == null || System.Xml.XmlConvert.ToBoolean(root)) break;
						ReadReferencedElement ();
						Reader.MoveToContent ();
					}
				}

				while (Reader.NodeType != System.Xml.XmlNodeType.EndElement &&
				       // it could be an empty root element
				       Reader.ReadState == ReadState.Interactive)
				{
					if (Reader.IsStartElement(typeMap.ElementName, typeMap.Namespace) 
					    || _format == SerializationFormat.Encoded)  
					{
						ReadAttributeMembers ((ClassMap)typeMap.ObjectMap, parameters, true);
						if (Reader.IsEmptyElement) {
							Reader.Skip();
							Reader.MoveToContent();
							continue;
						}
						Reader.ReadStartElement();
						ReadMembers ((ClassMap)typeMap.ObjectMap, parameters, true, false);
						ReadEndElement();
						break;
					}
					else 
						UnknownNode(null);

					Reader.MoveToContent();
				}
			}
			else
				ReadMembers ((ClassMap)typeMap.ObjectMap, parameters, true, _format == SerializationFormat.Encoded);

			if (_format == SerializationFormat.Encoded)
				ReadReferencedElements();

			return parameters;
		}