CookComputing.XmlRpc.XmlRpcSerializer.ParseHashtable C# (CSharp) Method

ParseHashtable() private method

private ParseHashtable ( XmlNode node, Type valueType, ParseStack parseStack, MappingAction mappingAction ) : Object
node System.Xml.XmlNode
valueType System.Type
parseStack ParseStack
mappingAction MappingAction
return Object
        Object ParseHashtable(
            XmlNode node,
            Type valueType,
            ParseStack parseStack,
            MappingAction mappingAction)
        {
            XmlRpcStruct retObj = new XmlRpcStruct();
              parseStack.Push("struct mapped to XmlRpcStruct");
              try
              {
            XmlNodeList members = node.ChildNodes;
            foreach (XmlNode member in members)
            {
              if (member.Name != "member")
            continue;
              XmlNode nameNode;
              bool dupName;
              XmlNode valueNode;
              bool dupValue;
              SelectTwoNodes(member, "name", out nameNode, out dupName, "value",
            out valueNode, out dupValue);
              if (nameNode == null)
            throw new XmlRpcInvalidXmlRpcException(parseStack.ParseType
              + " contains a member with missing name element"
              + " " + StackDump(parseStack));
              if (dupName)
            throw new XmlRpcInvalidXmlRpcException(parseStack.ParseType
              + " contains member with more than one name element"
              + " " + StackDump(parseStack));
              string rpcName = nameNode.FirstChild.Value;
              if (valueNode == null)
            throw new XmlRpcInvalidXmlRpcException(parseStack.ParseType
              + " contains struct member " + rpcName + " with missing value "
              + " " + StackDump(parseStack));
              if (dupValue)
            throw new XmlRpcInvalidXmlRpcException(parseStack.ParseType
              + " contains member with more than one value element"
              + " " + StackDump(parseStack));
              if (retObj.Contains(rpcName))
              {
            if (!IgnoreDuplicateMembers)
              throw new XmlRpcInvalidXmlRpcException(parseStack.ParseType
                + " contains struct value with duplicate member "
                + nameNode.FirstChild.Value
                + " " + StackDump(parseStack));
            else
              continue;
              }
              object valObj;
              parseStack.Push(String.Format("member {0}", rpcName));
              try
              {
            valObj = ParseValue(valueNode.FirstChild, null, parseStack,
              mappingAction);
              }
              finally
              {
            parseStack.Pop();
              }
              retObj.Add(rpcName, valObj);
            }
              }
              finally
              {
            parseStack.Pop();
              }
              return retObj;
        }