2014-07-20 58 views
-1

比方說,我有兩個類,即個人和項目:如何去/序列化嵌套對象與Json.Net

class Person { 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

class Project { 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public List<Person> Workers { get; set; } 
} 

我要存儲在名爲person.json單獨的文件數據的人及項目數據和project.json。

要序列我用下面的語句中的數據:

JsonConvert.SerializeObject(Collection, Formatting.None, new JsonSerializerSettings() 
    { 
     NullValueHandling = NullValueHandling.Ignore, 
     TypeNameHandling = TypeNameHandling.All 
    };) 

其中collection是List<People>

反序列化我用下面的語句中的人數據:

JsonConvert.DeserializeObject<List<T>>(json, , new JsonSerializerSettings() 
    { 
     NullValueHandling = NullValueHandling.Ignore, 
     TypeNameHandling = TypeNameHandling.All 
    };) 

其中JSON是從person.json字符串JSON數據。 我在列表框中顯示List<Person>

現在我不知道應該如何存儲項目數據,以便每次編輯人員對象並最終將其保存到person.json文件時,項目文件中List<Person>對象中的相應人員對象也更新。

我甚至不確定json是否是一個很好的方法來做到這一點,也許我應該嘗試一個關係數據庫。

請讓我知道如果我沒有很好地解釋我的情況。我真的需要用json來完成這項工作,併爲我的問題尋找解決方案。任何幫助表示讚賞。

+1

您需要用新內容重寫JSON文件。是的,這聽起來像一個關係數據庫更合適。 JSON和XML是* transport *格式,它們不是理想的*存儲*格式。 –

+0

@ LasseV.Karlsen - 大量系統使用JSON作爲存儲格式。無論格式如何,他所要求的都需要數據的管理層。 –

回答

2

你的問題並不是針對序列化,而是針對數據的同步。想一想,如果你使用XML,文本文件或者一些自定義的二進制格式,你會遇到同樣的問題。

由於您已將Person對象非規範化爲Project對象,因此每次保存項目時都會有全部人員數據的完整副本。

一個選擇是去正規化,而是隻是把的PersonID列表到Project對象。根據哪個路徑在您的應用中更加突出,您還可以考慮在Person對象中添加一個ProjectID的列表。換句話說,這種關係可以用任何一種方式來表達。

無論如何,你需要一些東西來管理你的數據。這可能是因爲你編寫了一堆代碼來從磁盤加載所有JSON文件並自己操縱它。這可能是因爲您將結構化數據映射到可以存儲在數據庫(如SQL Server或MySQL)中的關係模式。你可以使用像EntityFramwork或NHibernate這樣的ORM來幫助解決這個問題。或者,您可以使用RailsDB或MongoDB等NoSQL數據庫或許多其他類似項目。

換句話說 - 保持序列化和存儲的想法分開。有時序列化涉及存儲,但序列化也涉及傳輸,許多存儲引擎以自己的定製方式處理序列化。