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

使用Newtonsoft JSON反序列化时List属性FoodPositions始终为null的问题

解决Newtonsoft JSON反序列化时FoodPositions属性为null的问题

我之前也碰到过一模一样的情况,多半是属性映射不匹配或者类定义的小疏漏导致的,咱们一步步排查解决:

可能的原因及对应解决方案

1. 未给FoodPositions添加正确的JsonProperty特性

你贴的类定义没写完,但从JSON里的foodPositions字段来看,如果你类里的属性是FoodPositions,必须给它加上对应的JsonProperty特性指定JSON键名——毕竟Newtonsoft默认会按PascalCase(首字母大写)去匹配,而JSON里是驼峰式的foodPositions,大小写不匹配自然映射不上。

补全后的正确类定义应该是这样:

class BaxterResult 
{ 
    [JsonProperty("baxterPosition")] 
    public string BaxterPosition { get; set; } 

    [JsonProperty("baxterFoodLevel")] 
    public int BaxterFoodLevel { get; set; } 

    [JsonProperty("mousePosition")] 
    public string MousePosition { get; set; } 

    [JsonProperty("mouseFoodLevel")] 
    public int MouseFoodLevel { get; set; } 

    // 关键:这里必须加上[JsonProperty("foodPositions")]
    [JsonProperty("foodPositions")] 
    public List<string> FoodPositions { get; set; } 

    [JsonProperty("totalRounds")] 
    public int TotalRounds { get; set; } 

    [JsonProperty("gameComplete")] 
    public bool GameComplete { get; set; } 
}

2. 属性类型不匹配

确认你的FoodPositions属性类型是List<string>(或者IList<string>、string[]也可以),因为JSON里的foodPositions是字符串数组。如果你误把它定义成了其他类型(比如List<自定义对象>或者int[]),反序列化时会直接失败,导致属性值为null。

3. 检查属性的访问修饰符

确保FoodPositions是public的,Newtonsoft默认只会反序列化public的属性/字段,要是你把它设成了private或者protected,肯定拿不到值。

测试验证

用你给出的JSON字符串测试一下:

string json = @"{""baxterPosition"":""2x5"",""baxterFoodLevel"":18,""mousePosition"":""5x0"",""mouseFoodLevel"":18,""foodPositions"":[""0x0"",""5x5""],""totalRounds"":2,""gameComplete"":false}";
BaxterResult result = JsonConvert.DeserializeObject<BaxterResult>(json);
// 现在result.FoodPositions应该会包含["0x0", "5x5"]了

另外,如果你不想给每个属性都加JsonProperty,也可以配置Newtonsoft的序列化设置,让它自动匹配驼峰命名:

var settings = new JsonSerializerSettings
{
    ContractResolver = new CamelCasePropertyNamesContractResolver()
};
BaxterResult result = JsonConvert.DeserializeObject<BaxterResult>(json, settings);

这样只要类里的属性名是PascalCase(比如FoodPositions),就能自动匹配JSON里的驼峰foodPositions,不用一个个加特性了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:23:33