2015-02-07 77 views
0

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

這工作得很好。只要我想序列化到指定的類型。 但是,當我想使用它的任何類型的對象,我不能讓它的工作。 我已經使用聲明類型爲對象,而不是嘗試,然後在它的「目標」

像這樣將它轉換:(我是OFC加載包含了JSON

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

我得到一個鑄件例外正確的信息)

其他信息:無法轉換 類型 'Newtonsoft.Json.Linq.JArray' 到類型 的對象 'System.Collections.Generic.List`1 [KanbanBoard.Model.EmployeeModel]'。

我能得到它的工作的唯一辦法是通過鑄造它放在我反序列化在我JsonPersistence類,或者使用newtonsoft類它來回轉換,在目標點(如上面的例子。

這將是很好 - 除了我試圖真的很難讓我的程序即可輕鬆添加功能,以儘可能

我在github上整個項目:https://github.com/Toudahl/KanbanBoard 編輯:我目前在重構工作分支

回答

4

你可以改變你的方法

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

現在,它可以像使用:

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

真棒,這是最完美的解決方案:) 我們havnt學到了很多關於創建通用的東西,但 - 我想我只是可以使用的課程 - 我覺得很愚蠢,因爲沒有在方法上嘗試相同的方法 – 2015-02-07 18:44:08