使用C#导入JSON文件时多元素解析报错问题咨询
问题原因
- JSON格式非法:你提供的多元素JSON外层使用了对象标识
{},但内部直接放置数组[]没有对应属性名,不符合JSON语法规范。JSON解析器读取到第一个[时找不到合法的属性标识符,因此抛出对应错误。 - 解析类型不匹配:即使修正JSON格式,数组类型的内容也不能直接反序列化为单个
VerificationModel对象,二者结构不匹配。
你提到单元素时解析正常,说明单元素场景下你的JSON是合法的单个对象结构(仅用
{}包裹对象属性,没有嵌套数组),和多元素时的错误结构不一致。
解决方法
方案1:可修改源JSON(推荐)
将多元素JSON调整为纯数组结构,删除外层多余的{}:
[ { "EmployeeID": "123456", "statusCode": "100", "printDate": "01/01/2021" }, { "EmployeeID": "123456", "statusCode": "100", "printDate": "01/01/2021" } ]
修改反序列化代码,解析为集合类型:
var data = await reader.ReadToEndAsync(); var objects = JsonConvert.DeserializeObject<List<VerificationModel>>(data);
方案2:不可修改源JSON
先手动处理字符串去掉外层非法的{},再执行反序列化:
var data = await reader.ReadToEndAsync(); // 移除首尾多余的大括号 data = data.Trim().TrimStart('{').TrimEnd('}'); var objects = JsonConvert.DeserializeObject<List<VerificationModel>>(data);
可选方案:保留外层对象结构
如果需要保留外层{},给数组增加合法属性名即可:
{ "VerificationList": [ { "EmployeeID": "123456", "statusCode": "100", "printDate": "01/01/2021" }, { "EmployeeID": "123456", "statusCode": "100", "printDate": "01/01/2021" } ] }
新增外层映射模型:
public class VerificationRoot { public List<VerificationModel> VerificationList { get; set; } }
修改解析代码:
var data = await reader.ReadToEndAsync(); var root = JsonConvert.DeserializeObject<VerificationRoot>(data); var objects = root.VerificationList;
内容的提问来源于stack exchange,提问作者GettingStarted
相关产品推荐
相关产品推荐

