C#中JsonSerializer序列化自定义类型返回空对象的解决方法
问题核心原因
System.Text.Json 序列化器默认仅序列化公共属性,你的 JSONClass 中 JSONList 是公共字段而非属性,因此不会被纳入序列化结果,最终输出空对象 {},和自定义类型本身的支持无关。
解决方案
下面是三种可直接落地的处理方案:
- 方案1:将公共字段改为公共属性(最推荐,符合C#类型设计规范)
修改JSONClass的定义即可:
public class JSONClass { // 把字段改为带get/set访问器的属性 public List<JSONElement> JSONList { get; set; } = new List<JSONElement>(); }
其余代码不需要改动,直接运行就能得到预期序列化结果:
{"JSONList":[{"A":5,"B":"test1"},{"A":3,"B":"test2"}]}
- 方案2:配置序列化参数,开启字段序列化支持
如果你不愿意修改原有类型的字段定义,可以在调用Serialize方法时传入配置项,开启公共字段序列化:
var output = JsonSerializer.Serialize<JSONClass>(jsonClass, new JsonSerializerOptions { IncludeFields = true });
- 方案3:给指定字段加
[JsonInclude]特性(.NET 5+ 支持)
如果只需要序列化个别公共字段,不想全局开启字段序列化,可以给对应字段标注特性:
public class JSONClass { [System.Text.Json.Serialization.JsonInclude] public List<JSONElement> JSONList = new List<JSONElement>(); }
不需要改其他代码即可正常序列化。
内容的提问来源于stack exchange,提问作者ProGrammer
相关产品推荐
相关产品推荐

