2015-12-30 109 views
2

我正在嘗試使用RestSharp和C#使用REST API。 對於我現在用的是API的文檔提供了一個示例XML請求:使用RestSharp構建XML請求

<?xml version='1.0' encoding='UTF-8'?> 
<messages> 
<accountreference>EX0000000</accountreference> 
<from>07700900654</from> 
<message> 
    <to>07700900123</to> 
    <type>SMS</type> 
    <body>Hello Mr Sands.</body> 
</message> 
<message> 
    <to>07700900124</to> 
    <type>SMS</type> 
    <body>Hello Mr Mayo.</body> 
</message> 
</messages> 

我努力理解如何建立(稱爲「消息」多元素)

在他們想要的格式要求

我創建了這些類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); 

這很有用,當我只有1個消息元素,但我不知道如何創建多個消息元素,而沒有嵌套在一個數組中,它不適用於API。

回答

5

默認情況下休息夏普正在利用其自己的序列,但它也包了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<message> 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<message>() { 
       new message { to = "to1", body = "body1" }, 
       new message { to = "to2", body = "body2" } 
       } 
    }); 

將產生(我通過檢查得到了XML request.Parameters [0] .value的):

<?xml version="1.0" encoding="utf-8"?> 
<messages> 
    <accountreference>ref</accountreference> 
    <from>from</from> 
    <message> 
    <to>to1</to> 
    <body>body1</body> 
    </message> 
    <message> 
    <to>to2</to> 
    <body>body2</body> 
    </message> 
</messages> 

我想這是你一直在尋找的XML格式。

0

有消息列表將工作 -

public class messages 
{ 
    public string accountreference { get; set; } 

    public string from { get; set; } 

    public List<message> message { get; set; } 
} 

public class message 
{ 
    public string to { get; set; } 

    public string body { get; set; } 
} 

檢查最後的答案在這裏 -

How to post an array of complex objects with JSON, jQuery to ASP.NET MVC Controller?

如果你面對名單的問題,試試這個 -

Can RestSharp send a List<string> in a POST request?

+0

這不起作用,生成的XML包含嵌套在元素中的一組元素。 –

+0

是否有可能共享您正在使用的API細節。 – Arvin

+0

和請確保你已經嘗試過 - http://stackoverflow.com/questions/12284931/can-restsharp-send-a-liststring-in-a-post-request – Arvin