JSON响应转换为C#类时Newtonsoft.Json反序列化报错求助
JSON数组转C#类反序列化报错解决方案
问题根因
你所使用的JSON响应最外层为数组结构(以[]符号包裹),但你选择了单个对象类型Root作为反序列化目标,二者类型不匹配导致抛出序列化异常。json2csharp生成的Root类是工具默认假设JSON最外层为对象时生成的冗余类,当前场景下无需使用该类。
解决方案
1. 定义实体类
仅保留对应数组内元素的实体类即可,可按需修改类名增强语义:
// 对应原生成的MyArray类,可自定义类名 public class ModbusResponseItem { public int slaveId { get; set; } public int funcCode { get; set; } public int address { get; set; } public int quantity { get; set; } public List<int> data { get; set; } }
2. 修改反序列化代码
将反序列化目标修改为集合类型,两种常用写法如下:
- 反序列化为泛型列表
List<ModbusResponseItem> resultList = JsonConvert.DeserializeObject<List<ModbusResponseItem>>(myJsonResponse); // 如需获取第一个元素直接调用 resultList[0] 即可
- 反序列化为数组
ModbusResponseItem[] resultArray = JsonConvert.DeserializeObject<ModbusResponseItem[]>(myJsonResponse); // 如需获取第一个元素直接调用 resultArray[0] 即可
快速判断规则
后续处理JSON反序列化时可直接按外层结构匹配目标类型:
- JSON最外层为
{}→ 反序列化为单个自定义类 - JSON最外层为
[]→ 反序列化为List<T>或T[],T为数组内元素对应的类
内容的提问来源于stack exchange,提问作者Tom Boudniatski
相关产品推荐
相关产品推荐

