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

