将响应转发到另一个URL时,如何将响应主体从XML更改为Json?
我专门将响应转发到Azure Service Bus。
我尝试了许多不同的方法将XML序列化为json,但是由于策略表达式中不允许使用的某些JsonConvert方法的限制,所以运气不佳。
不,<json-to-xml apply="content-type-json" consider-accept-header="true" />
不是解决方案:)
<outbound>
<base />
<send-request mode="new" response-variable-name="response_body" timeout="60" ignore-error="true">
<set-url>https://servicebus.fake</set-url>
<set-method>POST</set-method>
<set-header name="Authorization" exists-action="override">
<value>@{
// some code to construct the token key that's needed for service bus requests.
}
</value>
<set-header name="MessageId" exists-action="skip">
<value>@{
var guid = Guid.NewGuid().ToString();
return guid;
}
</value>
</set-header>
<set-header name="Content-Type" exists-action="override">
<value>application/json</value>
</set-header>
<set-body>@{
// What must I add here?
}
</set-body>
</send-request>
<set-header name="Content-Type" exists-action="override">
<value>application/json</value>
</set-header>
</outbound>
答案 0 :(得分:1)
这是解决方案:)策略表达式中不允许使用典型的JsonConvert.SerializeXmlNode方法。
然而,JsonConvert.SerializeObject的出色表现可以达到目的。
<send-one-way-request mode="new">
<set-url>http://requestb.in/xje199xj</set-url>
<set-method>POST</set-method>
<set-header name="Content-Type" exists-action="override">
<value>application/json</value>
</set-header>
<set-body>@{
string xml = context.Response.Body.As<string>(preserveContent: true);
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
return JsonConvert.SerializeObject(doc);
}
</set-body>
</send-one-way-request>