/// <summary> /// Sends request to server via HTTP and deserialize string response /// </summary> /// <param name="request">MethodCall object</param> /// <returns>MethodResponse object</returns> public async Task <MethodResponse> SendRequestAndDeserialize(MethodCall request) { if (m_Uri != null) { string xmlRpcString = XmlRpcSerialization.XmlRpcSerialize(request); string responseString = await this.postHttp(xmlRpcString); MethodResponse response = XmlRpcSerialization.XmlRpcDeserialize(responseString); return(response); } else { throw new InvalidOperationException(); } }
/// <summary> /// Read XML document and deserialize into object /// </summary> /// <param name="reader">XML Reader</param> /// <param name="verifyObjectName"></param> /// <returns></returns> public override object ReadObject(XmlDictionaryReader reader, bool verifyObjectName) { MethodResponse methodResponse = null; MethodFaultResponse faultResponse = null; bool isFault = false; Param param = new Param(); object value = null; while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { if (reader.Name.ToLower() == "fault") { faultResponse = new MethodFaultResponse(); isFault = true; } if (isFault == true) { if (reader.Name.ToLower() == "value") { value = ParseValue(reader); XmlRpcStruct xmlRpcStruct = (XmlRpcStruct)value; foreach (StructMember member in xmlRpcStruct.Member) { if (member.Name == "faultCode") { faultResponse.FaultCode = Convert.ToInt16(member.Value); } else if (member.Name == "faultString") { faultResponse.Message = (string)member.Value; } } } } else { if (reader.Name.ToLower() == "params") { methodResponse = new MethodResponse(); methodResponse.ReceiveParams = new List <Param>(); } else if (reader.Name.ToLower() == "value") { value = ParseValue(reader); if (value != null) { param.Value = value; methodResponse.ReceiveParams.Add(param); } } } } } if (isFault) { isFault = false; //return faultResponse; XmlRpcFaultException ex = new XmlRpcFaultException(faultResponse.FaultCode, faultResponse.Message); throw ex; } else { return(methodResponse); } }