【问题标题】:Newtonsoft JSON string deserialization with \ escape character issueNewtonsoft JSON字符串反序列化与\转义字符问题
【发布时间】:2019-09-25 19:49:08
【问题描述】:

我们有一个这样的序列化 JSON 字符串:

{\\"count\":1,\r\n\"value\":[\r\n{\"HOST\":\"\\\\cifs_BI-FileDumps\\BI-FileDumps\\\"}]}

以上实际值:

\\cifs_BI-FileDumps\BI-FileDumps\

我尝试使用在线 JSON 解析器将其转换为正常工作以及有效的 JSON。

但是当我们尝试反序列化它时,我们得到了这个错误:

已执行“ExecuteQueryFunction”(失败,Id=d6a4875e-7aa8-47e8-b298-16d50f4807b5)System.Private.CoreLib:
执行函数时出现异常:ExecuteQueryFunction。
Newtonsoft.Json:错误的 JSON 转义序列:\B。路径 'value[0].HOST',第 3 行,位置 30。

【问题讨论】:

  • 请帮忙解决一下
  • 上述实际值:- \ \cifs_BI-FileDumps\BI-FileDumps\
  • 实际值以\\开头
  • 您必须对该字段进行编码。
  • 你显示的字符串是你在调试器中看到的吗?如果您在 Text Visualizer 或 JSON Visualizer 中查看它会是什么样子? (要访问调试器中的可视化工具,请查看变量并单击小放大镜图标)

标签: c# json.net


【解决方案1】:

您需要转义\,因此在序列化之前,对该字段进行编码。反序列化后,您应该解码回来。

\cifs_BI-FileDumps\BI-FileDumps\ 变为:

%5Ccifs_BI-FileDumps%5CBI-FileDumps%5C 编码后。

当你解码它时,它会以其他方式工作。

【讨论】:

  • 在序列化为 json 之前应该不需要转义任何东西,因为除了自制程序之外的任何 json 序列化程序都应该正确地自行转义有问题的字符。
  • 但是反序列化下面的字符串即使包含转义序列也会抛出错误
  • "{\"count\":1,\r\n\"value\":[\r\n{\"HOST\":\"\\\\cifs_BI-FileDumps\ \BI-FileDumps\\\"}]}"
猜你喜欢
  • 2019-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-19
相关资源
最近更新 更多