如何在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
相关产品推荐
相关产品推荐

