使用RestSharp构建XML请求

我正在尝试使用RestSharp和C#使用REST API。 我正在使用的API文档提供了一个示例XML请求:

  EX0000000 07700900654  07700900123 SMS Hello Mr Sands.   07700900124 SMS Hello Mr Mayo.   

我正在努力了解如何以他们想要的格式构建请求(多个元素称为“消息”)

我已经为RestSharp创建了这些类来进行序列化:

 public class messages { public string accountreference { get; set; } public string from { get; set; } public message message { get; set; } } public class message { public string to { get; set; } public string body { get; set; } } 

这是我的RestSharp代码:

 var client = new RestClient("http://api.url.com/v1.0") { Authenticator = new HttpBasicAuthenticator( UserName, Password) }; var request = new RestRequest("theresource", Method.POST) { RequestFormat = DataFormat.Xml }; request.AddBody( new messages { accountreference = Configuration.AccountReference, from = Configuration.From, message = new message { to = Configuration.Message.To, body = Configuration.Message.Body } }); var response = client.Execute(request); 

当我只有一个消息元素时,这很有用,但是我不知道如何创建多个消息元素而不将它们嵌套在数组中,这不适用于API。

默认情况下,RestSharp使用自己的序列化程序,但它也包含DotNetSerializer,因此您可以通过更改序列化程序来实现目标:

 var request = new RestRequest("theresource", Method.POST) { RequestFormat = DataFormat.Xml, XmlSerializer = new RestSharp.Serializers.DotNetXmlSerializer() }; 

然后,您可以使用消息对象列表并使用XmlElement属性进行装饰:

 public class messages { public string accountreference { get; set; } public string from { get; set; } [XmlElement("message")] public List messageList { get; set; } } public class message { public string to { get; set; } public string body { get; set; } } 

然后,您可以更改最后一位以添加多条消息:

 request.AddBody( new messages { accountreference = "ref", from = "from", messageList = new List() { new message { to = "to1", body = "body1" }, new message { to = "to2", body = "body2" } } }); 

会产生(我通过检查request.Parameters [0] .Value得到了XML):

   ref from  to1 body1   to2 body2   

我想这是你一直在寻找的XML格式。

将消息作为列表将起作用 –

 public class messages { public string accountreference { get; set; } public string from { get; set; } public List message { get; set; } } public class message { public string to { get; set; } public string body { get; set; } } 

查看最后的答案 –

如何使用JSON,jQuery向ASP.NET MVC Controller发布复杂对象数组?

如果你遇到列表问题,试试这个 –

RestSharp可以在POST请求中发送List 吗?