转换反序列化对象

Casting a deserialized object

我有一个 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);    
}

这很好用。只要我想序列化到指定的类型。 但是当我想将它用于任何类型的对象时,我无法让它工作。 我尝试使用将类型声明为对象,然后将其转换为 'destination'

像这样:

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

我遇到一个转换异常(我正在加载包含正确信息的 json)

Additional information: Unable to cast object of type 'Newtonsoft.Json.Linq.JArray' to type 'System.Collections.Generic.List`1[KanbanBoard.Model.EmployeeModel]'.

我能让它工作的唯一方法是在我的 JsonPersistence class 中反序列化它的地方投射它,或者使用 newtonsoft classes 来回转换它,在目的地点(如上例。

这很好 - 除了我非常努力地使我的程序尽可能容易地添加功能。

我在 github 上的整个项目:https://github.com/Toudahl/KanbanBoard 编辑:我目前正在重构 b运行ch

您可以将方法更改为

public T Load<T>(string fileName)
{
    string readAllText = File.ReadAllText(fileName);
    return JsonConvert.DeserializeObject<T>(readAllText);
}

现在可以像这样使用了:

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