使用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
相关产品推荐
相关产品推荐

