Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用'发布JSON\/';被转义为'\\/';_C#_.net_Json_Escaping_Backslash - Fatal编程技术网

C# 使用'发布JSON\/';被转义为'\\/';

C# 使用'发布JSON\/';被转义为'\\/';,c#,.net,json,escaping,backslash,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:\\/\\/

发布以下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和MicrosoftHttpClient),但它们都会导致相同的错误。我无法控制REST接口,它专门接受第一个JSON示例中所述的url格式

我还查看了.NET 4中的GenericUriParser选项,但似乎没有什么区别:


如何正确格式化请求?

问题在于您的字符串:

{
    "event": "orders.updated",
    "address": "http:\/\/82.75.163.12\/BiedMeerIntegration?connectionId=545",
    "is_active": true
}

实际上已经转义了,实际上是完全正确的JSON。请注意,在JavaScript和JSON中,转义
/
都是可选的,并且仅当此类符号位于
之后时才需要转义。为什么要首先转义斜杠?如果地址字符串中确实包含反斜杠字符,那么这就是问题所在,转义是JSON编码器应该做的事情。由literal
“foo\/bar”
生成的字符串中根本没有反斜杠字符;您看到的反斜杠是一个转义符,字符串只包含
f
o
o
//code>、
b
a
r
。同样值得注意的是:没有理由在字符串文本中转义斜杠,但是,如果在JSON编码的结果中得到两个反斜杠,那么这些不是转义(如您所示),它们是应该删除的实际反斜杠。