C#读取JSON文件遭遇JsonSerializationException异常求助
问题
读取某特定JSON文件时失败,其他JSON文件可正常读取,排查一小时仍未解决。
代码
List<VFData> visualFieldData; public class VFData { public double x { get; set; } public double y { get; set; } public string type { get; set; } public double contrast { get; set; } } private void LoadVFDataJSONFile(string VFdataFile ) { string jsonStream; using (StreamReader r = new StreamReader(VFdataFile)) { jsonStream = r.ReadToEnd(); } visualFieldData = JsonConvert.DeserializeObject<List<VFData>>(jsonStream); }
目标JSON格式(示例)
[ { "x": -4.0, "y": 4.0, "type": "vf", "contrast": 0.670277655 }, { "x": -14.0, "y": 4.0, "type": "vf", "contrast": 0.407872766 }, // 其余条目省略 { "x": -24.0, "y": -14.0, "type": "vf", "contrast": 0.407872945 } ]
报错信息
Newtonsoft.Json.JsonSerializationException: 无法将当前JSON对象(例如{"name":"value"})反序列化为类型'System.Collections.Generic.List`1[WindowsFormsApp1.Form1+VFData]',因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。
要修复此错误,请将JSON更改为JSON数组(例如[1,2,3]),或者更改反序列化类型,使其成为可以从JSON对象反序列化的普通.NET类型(例如不是整数等基元类型,也不是数组或List等集合类型)。也可以向该类型添加JsonObjectAttribute,强制其从JSON对象反序列化。
Path 'x', line 1, position 5.
解决办法
错误核心:你的代码期望读取JSON数组([...]结构),但实际读到的是单个JSON对象({...}结构)。
别纠结你贴的JSON示例了,那肯定不是你实际读取的文件内容,按下面步骤排查:
- 直接打开报错的目标JSON文件,检查开头是否为
[、结尾是否为]——大概率不是,可能是单个对象直接以{开头。 - 在代码中添加一行输出,确认实际读取到的JSON内容:
private void LoadVFDataJSONFile(string VFdataFile ) { string jsonStream; using (StreamReader r = new StreamReader(VFdataFile)) { jsonStream = r.ReadToEnd(); } // 打印前100个字符,验证实际内容 Console.WriteLine("实际读取的JSON开头:" + jsonStream.Substring(0, Math.Min(100, jsonStream.Length))); visualFieldData = JsonConvert.DeserializeObject<List<VFData>>(jsonStream); }
- 检查文件路径
VFdataFile是否指向了你预期的文件——有可能传错路径读取了其他不符合格式的JSON文件。
如果确认目标文件确实是单个对象结构,修改反序列化代码:
// 先反序列化为单个VFData对象 var singleItem = JsonConvert.DeserializeObject<VFData>(jsonStream); // 再将其存入List visualFieldData = new List<VFData> { singleItem };
内容的提问来源于stack exchange,提问作者Mike Wong
相关产品推荐
相关产品推荐

