从 c# json 响应中删除双反斜杠

Posted

技术标签:

【中文标题】从 c# json 响应中删除双反斜杠【英文标题】:Remove double backslash from c# json reponse 【发布时间】:2020-05-11 09:25:18 【问题描述】:

我需要生成如下所示的字符串

"\xdata,BARCODE,004\x"

但我无法在代码中给出相似的值,因为 '\' 是转义序列,所以我都尝试过

"\\xdata,BARCODE,004\\x"

@"\xdata,BARCODE,004\x"

但是在 json 响应中(在 Postman 和 Java 客户端应用程序中)得到这样的

"\\xdata,BARCODE,004\\x"

无论如何要删除 \ 或得到响应

"\xdata,BARCODE,004\x"

【问题讨论】:

当您说您收到的响应为 \\x... 您在哪里看到的?是在某个地方显示您逃逸的数据吗?这会将单个 \ 显示为 \\ 当我使用邮递员客户端时,我会变成这样 甚至在 java 客户端应用程序中也得到同样的响应 每当您将字符串序列化为 JSON 时,都会有一些字符被替换或转义。反斜杠是那些“将被转义”字符之一,因为它是 JSON => json.org - “my \ string” = json serialize => “my \\ string” = json deserialize => “的转义字符我的\字符串" 如果你想要一个 JSON 响应 "\xdata,BARCODE,004\x" 那么抱歉没有办法,因为那是一个无效的 JSON . 【参考方案1】:

抱歉,您给定的字符串是无效的 JSON 字符串,如果不转义反斜杠,就无法将其序列化为有效的 JSON。但是如果你的接收方需要得到这种结果,它根本不支持 JSON,你必须提供给定的格式。

在 ASP.Net 中,您的控制器必须将 ContentResult 作为 IActionResult 返回。在这种情况下,内容将按原样给出,无需任何序列化:

public IActionResult MyControllerMethod(SomeRequest request)

    // Call your business model to receive the desired string...
    var content = @"\xdata,BARCODE,004\x";

    return Content(content);

    // Or for full control
    // return new ContentResult  Content = content, ContentType = "text/glibberish", StatusCode = 418 ;

刚刚用 swagger/swashbuckle 测试了代码,一切似乎都很好:

还用 Postman 对其进行了测试:

使用 powershell:

【讨论】:

字符串生成内容失败 - var content = "\xdata,BARCODE,004\x" 对不起,因为在这个例子中文本是硬编码的,它必须被编译器转义。通过用@ 符号标记文本来修复它。现在它可以编译了。 对不起,我试过这个得到“\\xdata,BARCODE,004\\x”,还有其他方法吗 开个玩笑,你应该接受text/plain 同样的结果是邮递员带有双反斜杠 "\\xdata,BARCODE,004\\x"

以上是关于从 c# json 响应中删除双反斜杠的主要内容,如果未能解决你的问题,请参考以下文章

Azure DevOps YAML 管道从传递的变量中删除引号和双反斜杠

路径名中的斜杠反斜杠双反斜杠

目标 C:用单反斜杠替换双反斜杠

将反斜杠更改为双反斜杠

双反斜杠不起作用?

网络资源路径的双斜杠//和双反斜杠\的区别