我在发布以下JSON对象时遇到问题:
{
"event": "orders.updated",
"address": "http:\/\/82.75.163.12\/BiedMeerIntegration?connectionId=545",
"is_active": true
}
上面的问题是.NET会转义所有反斜杠字符并将其发布为:
{
"event": "orders.updated",
"address": "http:\\/\\/82.75.163.12\\/BiedMeerIntegration?connectionId=545",
"is_active": true
}
我尝试了不同的库(如ServiceStack和Microsoft HttpClient),但它们都会导致相同的错误。我无法控制REST接口,它特别接受第一个JSON示例中声明的url格式。
我还看了一下.NET 4中的GenericUriParser选项,但似乎没有什么区别:http://msdn.microsoft.com/en-us/library/ee656542.aspx
我如何正确格式化请求?
答案 0 :(得分:0)
问题是你的字符串:
{
"event": "orders.updated",
"address": "http:\/\/82.75.163.12\/BiedMeerIntegration?connectionId=545",
"is_active": true
}
实际上已经被转义,实际上是完全正确的JSON。请注意,在JavaScript和JSON中,转义/
都是可选的,只有在<
之后出现此符号时才需要,以防止意外关闭<script>
标记。
JSON序列化程序的输出应该看起来像那样(即使那些\/
不是真正需要的,它们也是正确的)。因此,我并不真正理解为什么要将已经格式良好的JSON片段提供给JSON序列化器...然后再次将其转义。 如果您已经拥有正确的JSON,那么您是不是应该将其写入输出流?
相反,如果您拥有的是来自应用程序模型或服务中某处的"http:\/\/82.75.163.12\/BiedMeerIntegration?connectionId=545"
字符串(而不是您向我们展示的已经形成的JSON片段),那么问题是这样的字符串已经被转义了 - 在JavaScript或JSON中,可以是任何 - ,你应该先将它用相应的语言正确地取消它,然后再将其提供给序列化程序。但不要将JSON片段作为一个整体放在上面! ...没有充分转义的JSON片段没有任何意义,只是不是JSON 。 / p>