如何在C#中修复动态生成的无效JSON字符串(移除值中多余引号)
嘿,我来给你几种在C#里解决这个问题的实用方案,你可以根据自己的实际场景来选:
解决方案一:直接修正已生成的JSON字符串
如果已经拿到了那个结构有问题的JSON字符串,想要直接修改它,可以用正则表达式精准定位字符串值里的单引号并移除,避免误改JSON的结构符号:
using System.Text.RegularExpressions; // 注意这里的字符串要用@转义,避免双引号冲突 var invalidJson = @"{""Loan"":""6F40CDFD026674"",""DOB"":""2020-10-30"",""Payment"":""Online"",""Address"":""Can't connect ""}"; // 正则匹配双引号包裹内容里的单引号,替换为空 var validJson = Regex.Replace(invalidJson, @"(\s*""[^""]*?)'([^""]*""\s*)", "$1$2"); // 输出修正后的有效JSON Console.WriteLine(validJson);
这段代码会输出你想要的结果:{"Loan":"6F40CDFD026674","DOB":"2020-10-30","Payment":"Online","Address":"Cant connect "}
解决方案二:从源头避免问题(序列化前处理属性)
如果这个JSON是你自己从C#对象序列化生成的,那从源头处理会更稳妥——在序列化之前就把Address属性里的单引号移除,这样生成的JSON自然就是有效的:
首先定义对应的实体类:
public class LoanInfo { public string Loan { get; set; } public DateTime DOB { get; set; } public string Payment { get; set; } public string Address { get; set; } }
然后在赋值或序列化前处理Address属性:
using System.Text.Json; var loanInfo = new LoanInfo { Loan = "6F40CDFD026674", DOB = new DateTime(2020, 10, 30), Payment = "Online", Address = "Can't connect " }; // 移除Address里的单引号 loanInfo.Address = loanInfo.Address.Replace("'", string.Empty); // 序列化得到有效JSON var validJson = JsonSerializer.Serialize(loanInfo); Console.WriteLine(validJson);
补充一句:严格来说,JSON字符串内部的单引号是符合规范的,但如果你的解析工具对单引号敏感,或者是因为错误拼接JSON导致的结构问题,上面的两种方法都能完美解决你的需求。
内容的提问来源于stack exchange,提问作者Prasanth S




