c# - 使用 RestSharp 构建 XML 请求

标签 c# xml rest restsharp

我正在尝试使用 RestSharp 和 C# 来处理 REST API。 我正在使用的 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 创建了这些类来序列化:

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。

最佳答案

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

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

然后您可以使用 message 对象列表并使用 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" }
                }
    }); 

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

<?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 格式。

关于c# - 使用 RestSharp 构建 XML 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34527935/

相关文章:

c# - 类型中的属性名称必须是唯一的

c# - 需要一个模式来为每个实例方法模式调用 Verify 方法

java - 如何以编程方式在 xml 配置文件中设置属性?

rest - 使用RequestBuilder而不发送cookie

c# - 如何从未经检查的异常中恢复?

c# - 如何在 C# 中将对象数组向上转换为另一种类型的对象数组?

c++ - 无法使用 QXmlStreamReader 识别空元素

xml - 递归地对任意 XML 文档的元素进行排序

java - 如何在ajax成功函数中从java获取单值响应

.net - 制作 Silverlight 和常规 .NET REST 客户端的最便携方式是什么