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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:36:03