使用'\ /'发布JSON将转义为'\\ /'

时间:2014-05-22 09:56:43

标签: c# .net json escaping backslash

我在发布以下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

我如何正确格式化请求?

1 个答案:

答案 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>