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

使用Newtonsoft Json.NET解析JSON部分属性时的反序列化错误排查

问题解决:JSON反序列化类型不匹配错误

错误原因

你当前的JSON文件外层是对象结构({}),包含totalSize、validOn、readTime字段和entries数组,但你直接尝试将整个JSON对象反序列化为List<ClsBankMasterRecordJson>——而List类型仅能匹配JSON的数组结构([]),因此出现类型不匹配的错误。

解决方案

需要先创建一个对应整个JSON外层结构的根类,反序列化到该根类后,再提取其中的entries数组作为目标List。

步骤1:定义根类匹配JSON外层结构

根据你的JSON结构,创建如下根类:

public class BankStammRoot
{
    public int totalSize { get; set; }
    public DateTime validOn { get; set; }
    public DateTime readTime { get; set; }
    // 类型与你定义的ClsBankMasterRecordJson一致
    public List<ClsBankMasterRecordJson> entries { get; set; }
}

步骤2:确保ClsBankMasterRecordJson与entries元素匹配

你的ClsBankMasterRecordJson类需要和JSON中entries数组内每个对象的字段一一对应。例如,如果entries中的元素是:

{
  "bankCode": "12345",
  "bankName": "XX银行"
}

那么你的类应定义为(字段名需与JSON一致,或用JsonProperty特性映射大小写):

public class ClsBankMasterRecordJson
{
    // 若JSON字段是小驼峰,C#用大驼峰可加特性映射
    [JsonProperty("bankCode")]
    public string BankCode { get; set; }
    [JsonProperty("bankName")]
    public string BankName { get; set; }
    // 其他需要映射的属性
}

步骤3:修改反序列化代码

以Newtonsoft.Json(最常用的.NET JSON库)为例,修改代码如下:

using Newtonsoft.Json;
using System.IO;

public List<ClsBankMasterRecordJson> readBankStammNew()
{
    string jsonPath = @"F:\BankStamm.json";
    string jsonContent = File.ReadAllText(jsonPath);
    
    // 先反序列化到根对象
    BankStammRoot root = JsonConvert.DeserializeObject<BankStammRoot>(jsonContent);
    
    // 提取entries数组作为目标List
    return root.entries;
}

关键说明

  • 永远确保反序列化的目标类型与JSON的顶层结构一致:JSON顶层是{}就用类,是[]就用List或数组。
  • 若使用System.Text.Json(.NET Core 3.0+内置库),代码逻辑类似,仅需替换为JsonSerializer.Deserialize<BankStammRoot>(jsonContent)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 17:33:10