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

如何实现JsonConvert.DeserializeObject的泛型列表反序列化?

动态反序列化泛型列表解决方案

已知对象类型(Type itemType)的情况下,你可以通过以下两种方式实现动态泛型列表的反序列化:

方法一:使用非泛型重载结合泛型类型创建

直接利用JsonConvert.DeserializeObject(string, Type)重载,先通过typeof(List<>).MakeGenericType创建具体的泛型列表类型,再传入反序列化方法:

// 假设已获取到对象类型
Type itemType = ...;
// 创建List<itemType>对应的Type对象
Type listType = typeof(List<>).MakeGenericType(itemType);
// 执行反序列化
object listInstance = JsonConvert.DeserializeObject(jsonString, listType);

如果需要后续操作列表元素,可以将结果转为IList接口进行统一处理:

IList dynamicList = (IList)listInstance;
foreach (var item in dynamicList)
{
    // 可通过反射访问item的属性,例如获取prop1的值
    object propValue = item.GetType().GetProperty("prop1")?.GetValue(item);
}

方法二:反射调用泛型DeserializeObject方法

通过反射获取JsonConvert.DeserializeObject<T>的泛型方法定义,再生成对应泛型参数的方法实例并调用:

Type itemType = ...;
Type genericListType = typeof(List<>).MakeGenericType(itemType);
// 获取泛型方法定义
MethodInfo deserializeMethod = typeof(JsonConvert)
    .GetMethod("DeserializeObject", new[] { typeof(string) })
    .MakeGenericMethod(genericListType);
// 调用方法完成反序列化
object listInstance = deserializeMethod.Invoke(null, new object[] { jsonString });

两种方法中,方法一代码更简洁,是日常开发中的首选方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:45:05