Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法反序列化整型列表<;类型>;其中类型由运行时确定_C#_Json_Generics_Reflection - Fatal编程技术网

C# 无法反序列化整型列表<;类型>;其中类型由运行时确定

C# 无法反序列化整型列表<;类型>;其中类型由运行时确定,c#,json,generics,reflection,C#,Json,Generics,Reflection,我有一个场景应该非常简单,但事实并非如此 我有一个在运行时确定的类型 var entityTypes = _dbContext.Model.GetEntityTypes(); foreach (var entityType in entityTypes) { var requiredType = entityType.ClrType; var testMethod = typeof(JsonConvert).GetMethods().FirstOrDefault(

我有一个场景应该非常简单,但事实并非如此

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

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 });
}
我想打电话

JSonConvert.DeserialiseObject<List<type>>(json);
如果我的json是针对单个对象的,那么这一点非常有效

然而,事实并非如此,我的json是用于列表的。显然,上面的代码不起作用,因为它希望我的json是一个单独的对象

所以我试着改成

var requiredType = typeof(List<entityType.ClrType>);
var requiredType=typeof(列表);
和entityType无法解析

我做错了什么?抱歉,但我觉得泛型真的令人沮丧

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

干杯

保罗

这是:

.MakeGenericMethod(requiredType)
改为:

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