无法反序列化<type>类型确定为 t 运行时的 int 列表



我有一个场景,应该是非常简单的,但它不是!

我有一个在运行时确定的类型

我想打电话给

JSonConvert.DeserialiseObject<List<type>>(json);

通过Make泛型方法,因为我需要在运行时确定类型

var entityTypes = _dbContext.Model.GetEntityTypes();
foreach (var entityType in entityTypes)
{
var requiredType = entityType.ClrType;
var testMethod = typeof(JsonConvert).GetMethods().FirstOrDefault(
x => x.Name.Equals("DeserializeObject", StringComparison.OrdinalIgnoreCase) &&
x.IsGenericMethod && x.GetParameters().Length == 1)
?.MakeGenericMethod(requiredType);
var filename = $"my json.json";
var json = File.ReadAllText(filename);
var actualData2 = testMethod?.Invoke(null, new object[] { json });
}

如果我的json是为一个对象

这工作完美然而,这不是情况,我的json是一个列表显然上面的代码不会工作,因为它期望我的json是一个单一的对象

所以我试着改成

var requiredType = typeof(List<entityType.ClrType>);

和entityType无法解析

我做错了什么?抱歉,但我发现泛型真的令人沮丧!

我的理想选择是能够获取对象列表并将其转换为所需类型的列表,但我无法以通用方式工作,因此必须尝试此

欢呼保罗

This:

.MakeGenericMethod(requiredType)

更改为:

.MakeGenericMethod(typeof(List<>).MakeGenericType(requiredType))

更可读:

var listType = typeof(List<>).MakeGenericType(requiredType);

...
.MakeGenericMethod(listType)

相关内容

最新更新