转换反序列化的对象

时间:2015-02-07 18:04:23

标签: c# casting json.net

我有一个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 编辑:我目前正在重构分支

工作

1 个答案:

答案 0 :(得分:4)

您可以将方法更改为

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

现在它可以像:

一样使用
Employees = PersistenceHandler.Load<List<EmployeeModel>>(_fileName);