转换反序列化对象
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);
我有一个 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);