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

运行时如何传入类名调用JsonConvert.DeserializeObject反序列化List类型数据

动态反序列化List类型JSON的解决方案

报错原因

你遇到的报错核心是反序列化目标类型和JSON结构不匹配:

Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'API.HelperClass.SummaryConciseData' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.

你的JSON根节点是数组结构,对应C#中的List<T>泛型集合类型,但你传入反序列化方法的目标类型是单个SummaryConciseData实体类,自然无法匹配。

实现方法

你需要先构造出对应List<T>的泛型类型,再传入反序列化方法,步骤如下:

  • 第一步:先获取单个业务实体的Type
// 注意类名大小写、命名空间要和实际定义完全一致,如果类不在当前程序集需要传入程序集限定名
Type entityType = Type.GetType("API.HelperClass.Summaryconcisedata");
  • 第二步:构造闭合的List泛型类型
// 先获取List<>的开放泛型类型,再传入实体类型生成对应的List<T>类型
Type listType = typeof(List<>).MakeGenericType(entityType);
  • 第三步:调用反序列化方法
// 得到的result是object类型,可根据业务需要转换为对应接口类型使用
var result = JsonConvert.DeserializeObject(jsonresult, listType);

额外注意事项

  • 你提供的Summaryconcisedata类存在构造函数参数匹配bug:构造函数最后一个参数是ct_risk,但你赋值时写的是this.risk = risk;,会找不到对应参数,要改成this.risk = ct_risk;,否则反序列化时会抛出参数绑定错误。
  • 如果你的30个业务类都实现了同一个公共业务接口,反序列化完成后可以直接将结果转换为对应接口的集合,方便统一处理:
// 假设所有业务类都实现了IBizModel接口
IList<IBizModel> bizList = (IList<IBizModel>)result;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:54:08