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

如何在C#中反序列化包含未转义双引号的JSON?

如何在C#中反序列化包含未转义双引号的JSON?

你遇到的问题根源是拿到的JSON不符合标准JSON规范:字符串值内部的双引号必须通过反斜杠\转义,未转义的双引号会导致解析器认为字符串提前结束,从而抛出异常。由于System.Text.Json默认采用严格解析模式,没有内置直接处理这种无效JSON的方法,需要先修复JSON格式,再进行反序列化。

解决方案1:正则表达式修复无效JSON

通过正则匹配字符串内部未转义的双引号,将其转义后再反序列化,这是最简便的处理方式(适用于JSON结构相对规范,仅存在字符串内部未转义双引号的场景)。

修复代码示例

using System.Text.RegularExpressions;
using System.Text.Json;

// 定义修复未转义双引号的方法
public static string FixUnescapedQuotesInJson(string invalidJson)
{
    // 匹配规则:在双引号包裹的字符串内容中,排除已转义的双引号,仅替换未转义的部分
    return Regex.Replace(
        invalidJson,
        @"(?<=([^\\]|^)\"")(?:[^""\\]|\\.)*?\K""(?!(:|,|\s*}|\s*]))",
        "\\\""
    );
}

// 调用示例
public class DescriptionModel
{
    public Guid Id { get; set; }
    public string? Description { get; set; }
}

string json = @"
{
    ""Id"": ""78d4f53a-8614-4096-ace9-72a62dbcdbc3"",
    ""Description"": ""100 Thieves is an esports organization and lifestyle brand founded in 2016 by Matthew ""Nadeshot"" Haag.""
}";

// 修复JSON格式
string fixedJson = FixUnescapedQuotesInJson(json);

// 执行反序列化
var result = JsonSerializer.Deserialize<DescriptionModel>(fixedJson);

解决方案2:自定义JsonReader处理(进阶)

如果正则表达式无法覆盖复杂场景(比如JSON嵌套层级深、存在特殊字符混合的情况),可以自定义Utf8JsonReader的处理逻辑,手动识别并修复未转义的双引号。这种方式代码量更大,仅推荐在正则无法满足需求时使用。

核心思路

在读取JSON字符串的过程中,逐字符检测未转义的双引号,手动插入转义符后,再将修复后的内容传递给解析器完成反序列化。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:34:59