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

反序列化Newtonsoft生成的JSON时,List<int>所属List<object>为null

解决Newtonsoft反序列化时包含List的字段为null的问题

看起来你在反序列化Newtonsoft生成的JSON时,遇到了List<int>类型字段(比如示例里的AllowedAreaKinds)变成null的情况,我之前处理过类似的问题,大概率是实体类定义或反序列化配置的问题,下面给你几个排查和解决的方向:

1. 检查实体类的属性定义是否匹配

这是最常见的原因,首先确保目标类中对应字段的类型和名称完全匹配JSON结构:

比如针对你提供的JSON,正确的实体类应该是这样的(注意AllowedAreaKinds的类型是List<int>,不是List<object>):

public class AreaKind
{
    public int ID { get; set; }
    public string Kind { get; set; }
}

public class AnimalRace
{
    public int ID { get; set; }
    public string Race { get; set; }
    // 重点:这里必须是List<int>,写成List<object>会导致反序列化失败
    public List<int> AllowedAreaKinds { get; set; }
}

public class Animal
{
    public string Name { get; set; }
}

public class Area
{
    public int ID { get; set; }
    public int AreaKindId { get; set; }
    public int Size { get; set; }
    public List<Animal> AnimalList { get; set; }
}

public class ZooData
{
    public List<AreaKind> AreaKindList { get; set; }
    public List<AnimalRace> AnimalRaceList { get; set; }
    public List<Area> AreaList { get; set; }
}

另外要注意:属性必须有公共的setter,如果是get; private set;这种,Newtonsoft无法给属性赋值,也会导致字段为null。

2. 检查属性名与JSON字段名是否一致

如果你的类属性名和JSON字段名不一致(比如大小写不同、命名风格不同),需要用JsonProperty特性显式映射:

比如如果类里把AllowedAreaKinds改成了AllowedAreaIds,就需要加上特性:

public class AnimalRace
{
    [JsonProperty("ID")]
    public int Id { get; set; }

    [JsonProperty("Race")]
    public string SpeciesName { get; set; }

    [JsonProperty("AllowedAreaKinds")]
    public List<int> AllowedAreaIds { get; set; }
}

3. 检查反序列化配置是否正确

有时候错误的序列化设置也会导致这个问题,比如设置了MissingMemberHandling = MissingMemberHandling.Error但字段不匹配,或者NullValueHandling的配置影响了赋值。建议用默认配置先测试,或者显式指定正确的设置:

string json = "你的JSON字符串";
var settings = new JsonSerializerSettings
{
    MissingMemberHandling = MissingMemberHandling.Ignore, // 忽略JSON中存在但类中没有的字段
    NullValueHandling = NullValueHandling.Include // 确保null值也被正确处理
};
var zooData = JsonConvert.DeserializeObject<ZooData>(json, settings);

4. 验证JSON格式是否完整

虽然你说JSON是Newtonsoft生成的,但也可以先验证一下JSON的完整性,比如示例里的AnimalList中的Name字段值是"Le...",确保实际JSON中这个字段是完整闭合的,没有语法错误。

按照上面的步骤排查后,基本就能解决List<int>字段反序列化后为null的问题了。

内容的提问来源于stack exchange,提问作者Marcel Grüger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:40:54