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

C#中List<CustomClass>序列化为JSON返回空数组问题排查

关于Newtonsoft.Json序列化List返回空数组的问题

嘿,这个问题我之前也碰到过好几次,Newtonsoft.Json本身没有限制自定义类List的序列化,大概率是你的代码里有细节没注意到,我给你梳理几个最常见的排查方向:

1. 访问修饰符问题(最可能的原因)

Newtonsoft.Json默认只会序列化**公共(public)**的成员,不管是类的属性/字段,还是包含List的字段:

  • 检查你的User类:如果里面的属性/字段都是private或internal,序列化时会直接被忽略,最终导致每个User对象被序列化成空对象,整个List看起来就像空数组(如果User类本身是internal,也可能被序列化器忽略)。
    解决办法:要么把成员改成public,要么给需要序列化的私有成员加上[JsonProperty]特性,比如:
    class User {
        [JsonProperty]
        private string Username; // 强制序列化私有字段
    }
    
  • 检查UserCreator类里的List<User>字段:如果这个字段是private,默认也不会被序列化,同样需要改成public或者添加[JsonProperty]。

2. List本身是空的?

别笑,有时候真的是我们自己的GenerateList方法没正确填充数据!先在WriteList方法里加个调试断点,确认List里确实有User对象,别冤枉了序列化器😂

3. 自定义序列化配置干扰

如果你在序列化时用了自定义的JsonSerializerSettings,比如修改了ContractResolver,可能会意外过滤掉需要序列化的成员:
比如下面的配置会改变默认序列化规则,可能导致异常:

var settings = new JsonSerializerSettings {
    ContractResolver = new DefaultContractResolver {
        IgnoreSerializableAttribute = true,
        // 其他可能影响的配置
    }
};
JsonConvert.SerializeObject(userCreator, settings);

可以暂时去掉自定义配置,试试能不能正常序列化。

4. User类的构造函数问题(相对少见)

虽然序列化本身不需要无参构造函数,但如果你的User类只有带参数的构造函数,且没有标记[JsonConstructor]特性,在某些复杂场景下也可能导致序列化异常。不过这个更多影响反序列化,但也可以排查一下——给User类加个无参构造函数试试。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:04:07