动态类型化列表,使用反射反序列化
本文关键字:反射 反序列化 类型化 列表 动态 | 更新日期: 2023-09-27 17:50:14
我有一个小问题。我应该通过c#中的json.net库来反序列化json。我不明白你怎么能切换输入粗体的列表,当然,所有使用反射,因为我在做一个泛型方法。
有人能给我开导一下吗?或解决方案:)
public static void insertTable(String json, String table)
{
using (localDBService db = new localDBService())
{
dynamic item = Activator.CreateInstance(Type.GetType("eStartService." + table));
item = JsonConvert.DeserializeObject(json);
try
{
var set = db.Set(item.GetType());
set.Add(item);
db.SaveChanges();
log.Info("Scritto sul database dal metodo InsertTable");
}
catch (Exception ex)
{
log.Info("ERRORE DI SCRITTURA SUL DATABASE METODO : insertTable");
throw ex;
}
}
}
错误:实体类型JArray不是当前上下文模型的一部分。
感谢我的需要是能够读取json,反序列化在你的对象动态,因为你看到我现在…从我粘的那个错误中解脱出来。
我们应该基于特定类型(如
)创建List<>
的通用类型。var listType = typeof (List<>).MakeGenericType(type);
下面是一个完整的示例,将json值反序列化为具有自定义类型的列表:
public static void insertTable(String json, String table)
{
using (localDBService db = new localDBService())
{
var tableType = Type.GetType("eStartService." + table);
var list = DeserializeList(json, tableType);
try
{
var set = db.Set(tableType);
foreach (var item in list)
set.Add(item);
db.SaveChanges();
log.Info("Scritto sul database dal metodo InsertTable");
}
catch (Exception ex)
{
log.Info("ERRORE DI SCRITTURA SUL DATABASE METODO : insertTable");
throw ex;
}
}
}
private static IList DeserializeList( string value,Type type)
{
var listType = typeof (List<>).MakeGenericType(type);
var list = JsonConvert.DeserializeObject(value, listType);
return list as IList;
}