public XmlRpcFaultException ParseFault(XmlNode faultNode, ParseStack parseStack) { var valueNode = faultNode.SelectSingleNode("value"); var structNode = valueNode.SelectSingleNode("struct"); if (structNode == null) { throw new XmlRpcInvalidXmlRpcException("class element missing from fault response."); } var fault = new XmlFault(); try { fault = (XmlFault)ParseValue(structNode, typeof(XmlFault), parseStack); } catch (Exception ex) { // some servers incorrectly return fault code in a string if (!_config.AllowStringFaultCode()) { throw; } try { var faultStrCode = (FaultStructStringCode)ParseValue(structNode, typeof(FaultStructStringCode), parseStack); fault.faultCode = Convert.ToInt32(faultStrCode.faultCode); fault.faultString = faultStrCode.faultString; } catch (Exception) { // use exception from when attempting to parse code as integer throw ex; } } return(new XmlRpcFaultException(fault.faultCode, fault.faultString)); }