You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Newtonsoft Json.NET反序列化含特殊字符JSON至字典的问题求助

最优解决方案:先确保JSON格式合法

嘿,你的问题根源其实不是Json.NET的问题,而是你用的JSON字符串本身就不合法——看示例里的description字段值:"The one live with "ALIGATOR"",这里面包裹ALIGATOR的双引号没有转义,直接暴露在字段值里,导致JSON解析器根本没法正确识别字段的边界,自然反序列化失败。

直接移除双引号虽然能让解析通过,但会丢失原始内容里的引号信息,这显然不是最优解。正确的思路应该是先保证JSON合法,下面分两种场景给你方案:

场景一:你自己构造JSON字符串(推荐优先)

如果这个JSON是你手动拼接或者生成的,那只要把内容里的双引号用反斜杠转义就行。在C#里,因为字符串本身用双引号包裹,所以转义符\还要再转一次变成\\,最终代码应该是这样:

string jsonString = "{\"name\":\"Jones Smith\",\"age\":\"20\",\"description\":\"The one live with \\\"ALIGATOR\\\"\"}";
Dictionary<string, object> dict = JsonConvert.DeserializeObject<Dictionary<string, object>>(jsonString);

这样处理后,JSON就完全符合规范了,Json.NET能轻松解析出正确的字典。

场景二:JSON是外部获取的无效数据

如果这个无效JSON是从第三方接口、文件或者其他你没法控制的地方拿到的,那可以先做预处理,把未转义的双引号转义回来。这里可以用正则表达式来匹配字段值内的非法双引号:

using System.Text.RegularExpressions;

string invalidJson = "{\"name\":\"Jones Smith\",\"age\":\"20\",\"description\":\"The one live with \"ALIGATOR\"\"}";
// 匹配字段值里未被转义的双引号,给它们加上转义符
string validJson = Regex.Replace(invalidJson, @"(?<!\\)""(?=(?:[^""\\]|\\.)*""(?:,|}))", "\\\"");
Dictionary<string, object> dict = JsonConvert.DeserializeObject<Dictionary<string, object>>(validJson);

这个正则的逻辑是:找到那些不在反斜杠后面、并且处于字段值内部的双引号,给它们补上转义符。不过要注意,这种预处理方式有局限性,如果JSON里还有更复杂的特殊字符(比如转义后的反斜杠),可能需要更严谨的处理逻辑,但针对你当前的场景已经足够用了。

为啥不推荐直接删双引号?

直接移除双引号会破坏原始数据的含义——原本的"ALIGATOR"会变成ALIGATOR,丢失了引号的信息,这在很多业务场景下是不能接受的。只有当你百分百确定这些引号是多余的错误时,才考虑这种方式,但显然这不是最优的解决思路。

内容的提问来源于stack exchange,提问作者Luyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:11:28