C# 用RestSharp构建XML请求

C# 用RestSharp构建XML请求,c#,xml,rest,restsharp,C#,Xml,Rest,Restsharp,我正在尝试使用RestSharp和C#使用restapi。 我正在使用的API文档提供了一个示例XML请求: <?xml version='1.0' encoding='UTF-8'?> <messages> <accountreference>EX0000000</accountreference> <from>07700900654</from> <message> <to>

我正在尝试使用RestSharp和C#使用restapi。 我正在使用的API文档提供了一个示例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代码:

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不兼容。

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

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; }
}
公共类消息
{
公共字符串accountreference{get;set;}
来自{get;set;}的公共字符串
公共列表消息{get;set;}
}
公共类消息
{
{get;set;}的公共字符串
公共字符串体{get;set;}
}
在这里检查最后一个答案-

如果您在列表中遇到问题,请尝试此选项-


默认情况下,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<message> messageList { get; set; }
}


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

    public string body { get; set; }
}
公共类消息
{
公共字符串accountreference{get;set;}
来自{get;set;}的公共字符串
[XmlElement(“消息”)]
公共列表消息列表{get;set;}
}
公共类消息
{
{get;set;}的公共字符串
公共字符串体{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" }
                }
    }); 
request.AddBody(
新消息
{
accountreference=“ref”,
from=“from”,
messageList=新列表(){
新消息{to=“to1”,body=“body1”},
新消息{to=“to2”,body=“body2”}
}
}); 
这将产生(我通过检查request.Parameters[0].Value获得XML):


裁判
从…起
到
车身1
to2
车身2

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

这不起作用,生成的XML包含一组嵌套在元素中的元素。您是否可以共享正在使用的API详细信息。请确保您已经尝试过此方法-详细信息都在我的问题中。我需要创建XML请求主体,如图所示。谢谢!RestSharp中的默认XmlSerializer只是将我作为参数[0]的值。添加了
XmlSerializer=new RestSharp.Serializers.DotNetXmlSerializer()
,它就这样工作了!
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 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>