2015-12-30 1 views
2

Я пытаюсь работать с REST API с помощью RestSharp и C#. Документация по API, который я использую дает запрос на образец XML:Создание запроса XML с помощью RestSharp

<?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

По умолчанию Rest Sharp использует свой собственный сериалайзер но и пакеты 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