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

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

"\x{data,BARCODE,004}\x"

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

"\\x{data,BARCODE,004}\\x"

@"\x{data,BARCODE,004}\x"

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

"\\x{data,BARCODE,004}\\x"

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

"\x{data,BARCODE,004}\x"

【问题讨论】:

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

标签: c# asp.net .net asp.net-mvc-4 asp.net-web-api


【解决方案1】:

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

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

public IActionResult MyControllerMethod(SomeRequest request)
{
    // Call your business model to receive the desired string...
    var content = @"\x{data,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 = "\x{data,BARCODE,004}\x"
  • 对不起,因为在这个例子中文本是硬编码的,它必须被编译器转义。通过用@ 符号标记文本来修复它。现在它可以编译了。
  • 对不起,我试过这个得到“\\x{data,BARCODE,004}\\x”,还有其他方法吗
  • 开个玩笑,你应该接受text/plain
  • 同样的结果是邮递员带有双反斜杠 "\\x{data,BARCODE,004}\\x"
猜你喜欢
  • 2013-01-17
  • 2018-08-23
  • 2020-12-01
  • 2019-10-16
  • 2012-12-21
  • 1970-01-01
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多