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

如何定义C#类以生成指定结构的目标JSON字符串

解决C#类序列化JSON结构不匹配的问题

你的问题出在Var_Args类的设计上——它把title和owner放在同一个对象里,导致序列化后每个数组元素会同时包含这两个属性。要生成目标JSON,我们需要让var_args数组里的每个元素是仅包含单个属性的独立对象,而不是多属性的复合对象。下面给你两种可行的解决方案:

方案一:匿名对象 + object[](快速灵活)

直接修改Request类,把Var_Args[]替换成object[],同时移除原来的Var_Args类:

public class Request 
{ 
    public object[] var_args { get; set; } 
}

// 对应JSON外层的requests数组,你应该已经有这个类了
public class Root
{
    public Request[] requests { get; set; }
}

创建实例时,直接往var_args中添加匿名对象,每个对象只包含一个属性:

var root = new Root
{
    requests = new[]
    {
        new Request
        {
            var_args = new object[]
            {
                new { title = "Test" },
                new { owner = "skaner" },
                // 后续可以按需添加其他单属性对象,比如 new { status = "Active" }
            }
        }
    }
};

这样序列化后就能得到你想要的目标JSON结构。

方案二:强类型类(适合编译时检查)

如果需要编译时类型检查,避免拼写错误,可以为每个单独的属性创建对应的类,然后用object[]来承载这些类的实例:

public class Request 
{ 
    public object[] var_args { get; set; } 
}

public class Root
{
    public Request[] requests { get; set; }
}

// 每个类对应一个单独的属性
public class TitleArg
{
    public string title { get; set; }
}

public class OwnerArg
{
    public string owner { get; set; }
}

实例化代码如下:

var root = new Root
{
    requests = new[]
    {
        new Request
        {
            var_args = new object[]
            {
                new TitleArg { title = "Test" },
                new OwnerArg { owner = "skaner" }
            }
        }
    }
};

注意事项

  • 如果你使用的是System.Text.Json,默认不会添加类型信息,完全符合需求;
  • 如果使用Newtonsoft.Json,请确保关闭TypeNameHandling配置,否则序列化结果会多出$type字段,破坏目标结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:34:56