You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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

火山引擎 最新活动