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

使用C#导入JSON文件时多元素解析报错问题咨询

问题原因
  1. JSON格式非法:你提供的多元素JSON外层使用了对象标识{},但内部直接放置数组[]没有对应属性名,不符合JSON语法规范。JSON解析器读取到第一个[时找不到合法的属性标识符,因此抛出对应错误。
  2. 解析类型不匹配:即使修正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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:27:04