我有一个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);
}
这很好用。只要我想序列化到指定的类型。 但是,当我想将它用于任何类型的对象时,我无法使其工作。 我尝试使用将类型声明为对象,然后将其强制转换为“目标”
像这样:
Employees = (List<EmployeeModel>)PersistenceHandler.Load(_fileName);
我得到一个转换异常(我正在加载包含正确信息的json)
附加信息:无法投射类型的对象 输入'Newtonsoft.Json.Linq.JArray' 'System.Collections.Generic.List`1 [KanbanBoard.Model.EmployeeModel]'。
我可以让它工作的唯一方法是将它转换为我在JsonPersistence类中反序列化的方法,或者使用newtonsoft类在目标点来回转换它(如上例所示。) p>
哪个会好的 - 除非我努力让我的程序尽可能轻松地添加功能。
我在github上的整个项目:https://github.com/Toudahl/KanbanBoard 编辑:我目前正在重构分支
工作答案 0 :(得分:4)
您可以将方法更改为
public T Load<T>(string fileName)
{
string readAllText = File.ReadAllText(fileName);
return JsonConvert.DeserializeObject<T>(readAllText);
}
现在它可以像:
一样使用Employees = PersistenceHandler.Load<List<EmployeeModel>>(_fileName);