c# - 无法反序列化 int List其中类型在运行时确定
问题描述
我有一个场景应该非常简单,但事实并非如此!
我有一个在运行时确定的类型
我想打电话
JSonConvert.DeserialiseObject<List<type>>(json);
通过 Make Generic Method 因为我需要在运行时确定类型
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 无法解析
我究竟做错了什么?抱歉,我发现泛型真的很令人沮丧!
我的理想选择是能够获取对象列表并将其转换为所需类型的列表,但我无法让它以通用方式工作,因此不得不尝试这个
干杯
保罗
解决方案
这个:
.MakeGenericMethod(requiredType)
改成:
.MakeGenericMethod(typeof(List<>).MakeGenericType(requiredType))
更具可读性:
var listType = typeof(List<>).MakeGenericType(requiredType);
接着
...
.MakeGenericMethod(listType)
推荐阅读
- forth - 如何访问 Forth 中的阴影定义?
- python - Python的Pdf2image库抛出“显示/空间中没有字体”错误
- python - 供应商依赖项无法找到密码学
- javascript - 连接 node.js 和服务器引擎 Net.Core 的最佳方式
- c++ - C++ 单行中的多个命名空间
- c++ - 我怎么能在我的 C 代码中包含这个 C++ 函数
- c++ - 代码没有显示任何错误,但输出不会改变插入排序
- ios - 如何使用 XMPP 聊天服务器获取特定消息的读取状态
- c++ - 如何使 std::cin 只读取输入的一部分?
- typescript - 带有 typescript 的 redux-observable 版本 2