static FaultCode ReadFaultCode12(XmlDictionaryReader r, string ns) { FaultCode subcode = null; XmlQualifiedName value = XmlQualifiedName.Empty; if (r.IsEmptyElement) { throw new ArgumentException("either SubCode or Value element is mandatory in SOAP fault code."); } r.ReadStartElement(); // could be either Code or SubCode r.MoveToContent(); while (r.NodeType != XmlNodeType.EndElement) { switch (r.LocalName) { case "Subcode": subcode = ReadFaultCode12(r, ns); break; case "Value": value = (XmlQualifiedName)r.ReadElementContentAs(typeof(XmlQualifiedName), r as IXmlNamespaceResolver, "Value", ns); break; default: throw new ArgumentException(String.Format("Unexpected Fault Code subelement: '{0}'", r.LocalName)); } r.MoveToContent(); } r.ReadEndElement(); return(new FaultCode(value.Name, value.Namespace, subcode)); }