如何定义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
相关产品推荐
相关产品推荐

