【问题标题】:Does C# have API that removes escaped JSON string?C# 是否具有删除转义 JSON 字符串的 API?
【发布时间】:2026-02-21 16:05:01
【问题描述】:

我有一个程序,我从以下格式的服务器接收 JSON:

{
  "Parent1Key":"{\n   \"Child11Key\" : 0,\n   \"Child21Key\" : \"successfully.\"\n}\n",
  "Parent2Key":"{\n   \"child21\" : true,\n   \"Child22\" : \"successful.\"\n}\n"
}

此字符串在我们的程序中手动转义为以下格式:

{"Parent1Key":{ "Child11Key" : 0,    "Child21Key" : "successfully." },"Parent2Key":{ "child21" : true,    "Child22" : "successful." }}

抱歉,此问题无法分享进行此更改的具体代码。

这样我们就可以将它传递给我们的反序列化逻辑。

当我们保存带有转义字符的字符串时遇到问题,例如 "child22" : "{text""child22" : "text}"

是否有 C# API 可以正确删除转义的 JSON 格式并返回所需的字符串。

【问题讨论】:

  • 是的,当然 - Newtonsoft.Json 可以做到 - 你应该永远手动进行转义/取消转义
  • @SirRufo,Newtonsoft.Json 是如何做到这一点的,它提供了什么 API?
  • 它可以序列化/反序列化 JSON,这就是你所需要的

标签: c# json serialization deserialization


【解决方案1】:

因此,您似乎有一些 JSON,它是通过序列化一些对象(Parent1KeyParent2Key),然后获取这些序列化字符串,将它们添加到另一个对象并对其进行序列化而构建的。所以内部对象最终会被双重序列化。

您需要做的是通过重新解析内部对象来反转该过程。你可以使用Json.Net

JObject obj = JObject.Parse(json);
obj["Parent1Key"] = JObject.Parse((string)obj["Parent1Key"]);
obj["Parent2Key"] = JObject.Parse((string)obj["Parent2Key"]);
json = obj.ToString();

小提琴:https://dotnetfiddle.net/z2zpd5

【讨论】: