C# 强制转换反序列化对象

C# 强制转换反序列化对象,c#,casting,json.net,C#,Casting,Json.net,我有一个PersistenceHandler,它实现了不同类型的持久性(至少它会) 但是,从文件加载时遇到了一些问题 PersistenceHandler中的代码: static public object Load(string fileName) { return _persistence.Load(fileName); } 它使用JsonPersistence中的此方法: public object Load(string fileName) { string readA

我有一个PersistenceHandler,它实现了不同类型的持久性(至少它会) 但是,从文件加载时遇到了一些问题

PersistenceHandler中的代码:

static public object Load(string fileName)
{
    return _persistence.Load(fileName);
}
它使用JsonPersistence中的此方法:

public object Load(string fileName)
{
    string readAllText = File.ReadAllText(fileName);    
    return JsonConvert.DeserializeObject<Dictionary<EnumCategories, CategoryViewModel>>(readAllText);    
}
公共对象加载(字符串文件名)
{
string readAllText=File.readAllText(文件名);
返回JsonConvert.DeserializeObject(readAllText);
}
这个很好用。只要我想序列化到指定的类型。 但是当我想把它用于任何类型的物体时,我都不能让它工作。 我尝试过使用将类型声明为对象,然后在其“目的地”强制转换它

像这样:

Employees = (List<EmployeeModel>)PersistenceHandler.Load(_fileName);
Employees=(List)PersistenceHandler.Load(\u文件名);
我得到一个强制转换异常(我正在ofc加载包含正确信息的json)

其他信息:无法强制转换类型为的对象 输入“Newtonsoft.Json.Linq.JArray” 'System.Collections.Generic.List'1[KanbanBoard.Model.EmployeeModel]'

让它工作的唯一方法是在JsonPersistence类中反序列化它的地方强制转换它,或者使用newtonsoft类在目标点来回转换它(如上面的示例)

这将是好的-除了我正在努力使我的程序尽可能容易地添加功能

我在github上的整个项目:
编辑:我目前在重构部门工作

您可以根据需要更改您的方法

public T Load<T>(string fileName)
{
    string readAllText = File.ReadAllText(fileName);
    return JsonConvert.DeserializeObject<T>(readAllText);
}
public T加载(字符串文件名)
{
string readAllText=File.readAllText(文件名);
返回JsonConvert.DeserializeObject(readAllText);
}
现在它可以像这样使用:

Employees = PersistenceHandler.Load<List<EmployeeModel>>(_fileName);
Employees=PersistenceHandler.Load(_fileName);

您可以根据需要更改方法

public T Load<T>(string fileName)
{
    string readAllText = File.ReadAllText(fileName);
    return JsonConvert.DeserializeObject<T>(readAllText);
}
public T加载(字符串文件名)
{
string readAllText=File.readAllText(文件名);
返回JsonConvert.DeserializeObject(readAllText);
}
现在它可以像这样使用:

Employees = PersistenceHandler.Load<List<EmployeeModel>>(_fileName);
Employees=PersistenceHandler.Load(_fileName);

Awesome,这是一个完美的解决方案:)我们还没有学到太多关于创建泛型的东西-我想我是唯一可以使用的类-我觉得没有在方法上尝试同样的东西很傻Awesome,这是一个完美的解决方案:)我们还没有学到很多关于创建泛型的东西——我想我是唯一可以使用的类——我觉得没有在方法上尝试同样的东西很愚蠢