首页 > 解决方案 > NewtonSoft.Json 的 JObject 的枚举在 C# 中丢失了 '\' 字符

问题描述

我想使用 NewtonSoft.Json 解析JObject.Parse()json字符串。假设 json 字符串是这样的:

{"json":"{\"count\":\"123\"}"}
  1. 结果jObject.First.ToString()"json": "{\"count\":\"123\"}"

  2. 结果jObject["json"].ToString(){"count":"123"}。枚举得到与此相同的结果。

我使用的测试代码是这样的。

[TestMethod()]
public void JsonParseTest()
{
   var json = "{\"json\":\"{\\\"count\\\":\\\"123\\\"}\"}";
   var jObject = JObject.Parse(json);
   Console.WriteLine($"json : {json}");
   Console.WriteLine($"jObject.First.ToString() : {jObject.First}");
   Console.WriteLine($"jObject[\"json\"].ToString() : {jObject["json"]}");
}

我们可以看到枚举 jObject 会丢失字符'\'。问题是什么?我将不胜感激任何建议:)

编辑 1 NewtonSoft 的版本是 2019.11.09 发布的 12.0.3。

标签: jsonjson.net

解决方案


解析器没有丢失任何东西。您的示例中没有文字\。反斜杠纯粹是 JSON 语法的一部分,用于转义"字符串 vlue 内部。键的json 值为 {"count":"123"}

如果您想在该值中使用反斜杠(但是我不明白您为什么要这样做),那么您需要添加它们,就像您在 C# 字符串中添加它们一样(C# 和 JSON 恰好具有相同的转义机制) :

{"json":"{\\\"count\\\":\\\"123\\\"}"}

with 导致 C# 代码:

var json = "{\"json\":\"{\\\\\\\"count\\\\\\\":\\\\\\\"123\\\\\\\"}\"}";

推荐阅读