void GenerateReadRoot ()
{
WriteLine ("public object " + _result.ReadMethodName + " ()");
WriteLineInd ("{");
WriteLine ("Reader.MoveToContent();");
if (_typeMap is XmlTypeMapping)
{
XmlTypeMapping typeMap = (XmlTypeMapping) _typeMap;
if (_format == SerializationFormat.Literal)
{
if (typeMap.TypeData.SchemaType == SchemaTypes.XmlNode) {
if (typeMap.TypeData.Type == typeof (XmlDocument))
WriteLine ("return ReadXmlDocument (false);");
else
WriteLine ("return ReadXmlNode (false);");
} else {
WriteLineInd ("if (Reader.LocalName != " + GetLiteral (typeMap.ElementName) + " || Reader.NamespaceURI != " + GetLiteral (typeMap.Namespace) + ")");
WriteLine ("throw CreateUnknownNodeException();");
Unindent ();
WriteLine ("return " + GetReadObjectCall (typeMap, GetLiteral(typeMap.IsNullable), "true") + ";");
}
}
else
{
WriteLine ("object ob = null;");
WriteLine ("Reader.MoveToContent();");
WriteLine ("if (Reader.NodeType == System.Xml.XmlNodeType.Element) ");
WriteLineInd ("{");
WriteLineInd ("if (Reader.LocalName == " + GetLiteral(typeMap.ElementName) + " && Reader.NamespaceURI == " + GetLiteral (typeMap.Namespace) + ")");
WriteLine ("ob = ReadReferencedElement();");
Unindent ();
WriteLineInd ("else ");
WriteLine ("throw CreateUnknownNodeException();");
Unindent ();
WriteLineUni ("}");
WriteLineInd ("else ");
WriteLine ("UnknownNode(null);");
Unindent ();
WriteLine ("");
WriteLine ("ReadReferencedElements();");
WriteLine ("return ob;");
RegisterReferencingMap (typeMap);
}
}
else {
WriteLine ("return " + GenerateReadMessage ((XmlMembersMapping)_typeMap) + ";");
}
WriteLineUni ("}");
WriteLine ("");
}