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

C# .Net Core中如何像JavaScript一样简便创建易读JSON对象

C# 构建JSON的简洁实现方案

你之前使用JsonObject写法冗余、@字符串体验差,本质是API选型和使用场景不匹配,以下是生产环境常用的简洁实现,写起来和JS的对象字面量体验差距极小:


方案1:匿名对象 + JSON序列化(最推荐,覆盖90%场景)

这是最接近JS开发体验的方案,不需要提前定义类型,支持直接引用外部变量,自动处理嵌套结构、数组、特殊字符转义,从根源上避免JSON格式错误。
首先引入所需命名空间:

using System.Text.Json;
using System.Text.Json.Serialization;

全局配置一次序列化规则(比如自动转驼峰命名、忽略null值,和前端JSON规范对齐):

var jsonOptions = new JsonSerializerOptions
{
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
    DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
};

构建JSON的代码和JS写法几乎一致,不需要层层嵌套new JsonObject/new JsonArray:

var payload = new
{
    documentId = documentID,
    testMode = true,
    signers = new[]
    {
        new
        {
            label = "John Smith",
            contactMethod = new[]
            {
                new { type = "link" }
            }
        }
    }
};

// 一步生成标准JSON字符串
string jsonPayload = JsonSerializer.Serialize(payload, jsonOptions);

补充:你之前用的JsonObject/JsonArray属于JSON DOM操作API,设计目标是动态解析、修改结构未知的JSON,用来从头构建固定结构的数据自然会显得繁琐。如果项目用Newtonsoft.Json(Json.NET),该写法完全通用,仅需把序列化方法替换为JsonConvert.SerializeObject(payload, jsonOptions)即可。


方案2:C# 11+ 原始字符串插值(适合固定结构、变量少的场景)

C# 11新增的原始字符串字面量解决了老版@逐字字符串的所有痛点:

  • 自动对齐代码缩进,不会把代码里的回车、前置空格注入到字符串内容中
  • 支持插值语法直接嵌入变量,不需要大量+拼接
  • 可以通过$的数量自定义插值括号的数量,避免和JSON本身的大括号冲突
    示例代码:
// $$ 表示插值使用两个大括号,和JSON自带的单大括号区分
string jsonPayload = $$"""
{
    "documentId": "{{documentID}}",
    "testMode": true,
    "signers": [
        {
            "label": "John Smith",
            "contactMethod": [
                { "type": "link" }
            ]
        }
    ]
}
""";

注意:该方案不会自动转义变量中的双引号、换行等特殊字符,如果嵌入的变量内容不可控,可能生成格式错误的JSON,这类场景请优先选择方案1。


方案3:Record强类型定义(适合结构固定、多次复用的场景)

如果同一个JSON结构需要在多处使用,可以用C#的record类型一行定义数据结构,后续构建代码更简洁,还能获得编译时的强类型检查:

// 数据结构仅需定义一次
record ContactMethod(string Type);
record Signer(string Label, ContactMethod[] ContactMethod);
record JsonPayload(string DocumentId, bool TestMode, Signer[] Signers);

// 构建时直接传值即可
var payload = new JsonPayload(
    documentID,
    true,
    new[] {
        new Signer("John Smith", new[] { new ContactMethod("link") })
    }
);
string jsonPayload = JsonSerializer.Serialize(payload, jsonOptions);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:57:39