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

使用C#读取处理JSON文件触发JsonException,求排查问题

问题分析与解决

你的反序列化异常由三个核心问题导致,逐一说明:

1. JSON语法不合法

当前JSON开头缺少最外层的对象包裹符{,正确的JSON结构应该是一个顶层对象,包含match数组。错误的开头直接以键值对"match": [开始,违反JSON语法规范。

修正后的JSON结构:

{
  "match": [
    {
      "id": "28172",
      "home_name": "Flamengo",
      "away_name": "Palestino",
      "score": "0 - 1",
      "time": "36",
      "league_id": "65",
      "status": "IN PLAY"
    },
    // ... 其余数组元素保持不变 ...
  ]
}

2. 数据类型不匹配

C# match类中id、time、league_id定义为int类型,但JSON中这些字段均为字符串类型(例如"id": "28172"),且time还存在"HT"这类非数字值,直接反序列化会触发类型转换失败。

两种解决思路:

  • 调整C#类字段类型为string,兼容JSON的字符串值:
    public class match
    { 
        public string id { get; set; }
        public string home_name { get; set; }
        public string away_name { get; set; }
        public string score { get; set; }
        public string time { get; set; }
        public string league_id { get; set; }
        public string status { get; set; }
    }
    
  • 若需保留int类型,需修改JSON中对应字段为数字类型(如"id": 28172),同时处理time字段的"HT"值(例如替换为0或新增状态字段区分半场休息)。

3. 反序列化目标类型不匹配

你的JSON是一个包含数组的顶层对象,而非直接的数组,因此不能直接反序列化为List<match>。需要定义匹配JSON结构的根对象类:

public class MatchesRoot
{
    public List<match> match { get; set; }
}

然后修改反序列化代码:

var root = JsonSerializer.Deserialize<MatchesRoot>(json);
incoming = root?.match ?? new List<match>();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:16:11