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

C#中用StringBuilder构建JSON遇双引号导致格式无效问题

问题描述

我做了个示例展示遇到的问题——用StringBuilder手动构建JSON时,一旦Model.Code字段包含双引号(比如示例里的123 "45"),生成的JSON就会格式无效。

public class Model
{
    public string Name { get; set; }
    public string Code { get; set; }
}

List<Model> list = new List<Model>();
list.Add(new Model()
{
    Name = "Test1",
    Code = "124565123"
});

list.Add(new Model() {
    Name = "Test2",
    Code= "123 \"45"
});

list.Add(new Model()
{
    Name = "Test3",
    Code = "456"
});

var sb = new StringBuilder();

sb.Append($"\"item_name\":\"{list[0].Name}\",");
sb.Append($"\"item_id\":\"{list[0].Code}\",");

sb.Append($"\"item_name\":\"{list[1].Name}\",");
sb.Append($"\"item_id\":\"{list[1].Code}\",");

sb.Append($"\"item_name\":\"{list[2].Name}\",");
sb.Append($"\"item_id\":\"{list[2].Code}\",");

return sb.ToString();

问题根源

手动拼接JSON字符串时,无法自动处理双引号、换行符、斜杠等特殊字符的转义逻辑。比如示例中Code = "123 \"45"会被直接拼为"item_id":"123 "45",这里的未转义双引号会直接打断JSON的结构,导致格式完全无效。

正确解决方案:使用官方JSON序列化库

绝对不要手动拼接JSON,直接使用.NET内置或成熟的第三方序列化工具,它们会自动处理所有特殊字符的转义,确保生成的JSON符合语法规范。

方案1:使用System.Text.Json(.NET Core 3.0+ 内置)

using System.Text.Json;

// 先构造符合JSON结构的对象(这里用匿名类定义JSON的层级)
var jsonData = new { items = list.Select(m => new { item_name = m.Name, item_id = m.Code }) };

// 序列化生成合法JSON
string jsonString = JsonSerializer.Serialize(jsonData);
return jsonString;

方案2:使用Newtonsoft.Json(第三方库,需通过NuGet安装)

using Newtonsoft.Json;

var jsonData = new { items = list.Select(m => new { item_name = m.Name, item_id = m.Code }) };
string jsonString = JsonConvert.SerializeObject(jsonData);
return jsonString;
特殊场景:手动转义单个字符串(不推荐)

如果确实有特殊需求需要手动处理单个字符串的转义,可以用以下方法,但仍强烈建议使用序列化库:

// System.Text.Json 转义单个字符串
string escapedCode = JsonEncodedText.Encode(list[1].Code).ToString();
sb.Append($"\"item_id\":\"{escapedCode}\",");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 22:00:23