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

JSON反序列化返回Null:无法获取TeamStatistics中的首发球员数据

解决C#反序列化JSON时TeamStatistics为Null的问题

问题根源

你调用的API返回的JSON结构是比赛对象数组,每个比赛对象里嵌套了home_team_statistics和away_team_statistics两个字段(对应两队的统计数据),而非直接返回TeamStatistics数组,也不是GameStats数组中直接包含TeamStatistics字段。quicktype生成的实体类大概率没正确匹配这个嵌套结构,导致反序列化失败。

具体解决步骤

1. 修正实体类结构

根据API返回的JSON结构,重新生成或调整实体类:

  • 根实体类(命名为MatchStats)需包含对应两队统计的属性,用特性映射JSON字段名:
    using Newtonsoft.Json; // 或System.Text.Json的JsonPropertyName
    
    public class MatchStats
    {
        [JsonProperty("home_team_statistics")]
        public TeamStatistics HomeTeamStatistics { get; set; }
    
        [JsonProperty("away_team_statistics")]
        public TeamStatistics AwayTeamStatistics { get; set; }
    
        // 可添加其他匹配的比赛属性,比如match_id、date等
    }
    
    public class TeamStatistics
    {
        [JsonProperty("starting_eleven")]
        public List<Player> StartingEleven { get; set; }
    
        // 其他统计属性,如team_name、goals等
    }
    
    public class Player
    {
        [JsonProperty("name")]
        public string Name { get; set; }
    
        [JsonProperty("position")]
        public string Position { get; set; }
    
        // 球员其他属性,如shirt_number等
    }
    
  • 如果使用System.Text.Json,把JsonProperty替换为JsonPropertyName即可。

2. 修正反序列化代码

将JSON反序列化为List<MatchStats>,而非之前的List<TeamStatistics>或List<GameStats>:

// 假设jsonContent是从API获取到的字符串
var matchStats = JsonConvert.DeserializeObject<List<MatchStats>>(jsonContent);

// 遍历获取所有比赛的首发球员
foreach (var match in matchStats)
{
    // 主队首发
    var homeStarters = match.HomeTeamStatistics?.StartingEleven;
    if (homeStarters != null)
    {
        foreach (var player in homeStarters)
        {
            Console.WriteLine($"主队首发:{player.Name} - {player.Position}");
        }
    }

    // 客队首发
    var awayStarters = match.AwayTeamStatistics?.StartingEleven;
    if (awayStarters != null)
    {
        foreach (var player in awayStarters)
        {
            Console.WriteLine($"客队首发:{player.Name} - {player.Position}");
        }
    }
}

3. 排查额外问题

  • 确认API返回的JSON中,home_team_statistics/away_team_statistics字段是否真的有值:部分比赛可能没有统计数据,会返回null,可先输出原始JSON片段验证。
  • 如果使用System.Text.Json,需开启大小写不敏感匹配:
    var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true };
    var matchStats = JsonSerializer.Deserialize<List<MatchStats>>(jsonContent, options);
    
  • 重新用quicktype生成类时,务必粘贴完整的API返回JSON片段,让工具正确识别嵌套层级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:48:10