2015-06-03 36 views
1

我正在尋找解決方案來讀取和寫入文件中的數據。數據是一個列表,包括文件路徑,名稱以及系統上用於視頻回放應用程序的兼容視頻格式列表。 XML數據結構看起來像這樣。WPF讀取/寫入JSON與XML

<player> 
    <name>WMP</name> 
    <path>C:\Program Files (x86)\Windows Media Player\wmplayer.exe</path> 
    <extensionList> 
     <string>AVI</string> 
     <string>WMP</string> 
    </extensionList> 
</player> 

我以前使用的XMLSerializer序列化其工作相當不錯的球員類的列表,並在此之前,我曾使用SQL。我最近聽說過JSON,並希望在存儲數據時擴大我的選擇範圍。有沒有人有任何建議,哪種格式更適合我的WPF應用程序,或者是否有更好的適合我的需求的數據訪問方法。

+0

JSON通常比XML小得多 - 但也有時不爲可讀。如果用戶永遠不會讀取您的XML文件,那麼我只會使用JSON來處理文件大小。你可能想看看[JavaScriptSerializer](https://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer%28v=vs.110%29.aspx),但我會**高度**推薦你,而不是去與[Newtonsoft Json.NET](http://www.newtonsoft.com/json)。如果您需要了解數據類型以及文件中沒有的內容,那麼XML就是要走的路。 – MightyLampshade

+1

@MightyLampshade我認爲我會純粹爲了可讀性去使用XML,因爲尺寸真的不是問題。 – Timmoth

回答

1

Theoreretical好處是,你可以有某種使用XPath和potentionally工作具有更大的數據集查詢的。

特別是在WPF你有XmlDataProvider,在那裏你可以直接進行數據綁定你的UI控件到XML節點。

這就是理論。在現實世界中,您幾乎肯定會將您的xml反序列化爲數據傳輸對象,因此您可以利用強類型類,編譯時檢查,OOP等。在這種情況下,xml的優點是無關緊要的。

另一方面,JSON文件略小,JSON序列化程序稍快,可能更好的人類可讀性。

文件大小在web場景中扮演角色,您需要在客戶端和服務器之間傳輸數據(與JavaScript不同,JSON格式來自JavaScript),但這不是您的情況。除非您使用大型數據集,否則您可能不必關心序列化性能。

在你的情況下,JSON和XML都不會更好或更糟。兩者都能很好地完成這項工作,而且你不能做出錯誤的決定。

Imho,如果你以前一直在使用XML,現在就去使用JSON,那麼你將有兩種經驗,你會學到一些新的東西。最後,這只是幾行代碼,您可以在需要時輕鬆地將序列化邏輯更改爲其他內容。

0

JSON和XML正在做同樣的事情:將數據表示爲文本。 JSON不比XML冗長,所以你的文件會更輕。 解析JSON比解析XML更快。

您可以檢查this lib解析JSON。

+0

感謝您與NuGet的鏈接,正在尋找Json.Net的免費替代品。 – Timmoth

2

當我明白你的問題,你只需要存儲和應用程序中的消費數據,並且不希望與其他應用程序交換它。

JSON的格式有導致較小的文件,一個非常低的開銷 - 這就是爲什麼它是在移動場景經常使用。另外,正如其名稱「JavaScript Object Notation」所表達的那樣,JavaScript可以很好地處理它,使其成爲Web應用程序的理想選擇。

,因爲它在過去幾年中得到了廣泛的使用有用於.NET可序列化.NET波蘇斯到JSON,例如良好的圖書館JSON.NET

就你而言,它或多或少取決於你的個人選擇。根據您描述的要求,我沒有看到使用JSON而不是XML序列化的強有力的理由。 XML的

1

正如其他答案,如果你需要你的文件更小(例如在移動/ Web應用程序中)JSON是要走的路,因爲文件較小。另一方面,如果文件大小不是問題,那麼我會使用XML,因爲如果這些文件是易失性的並且會改變它們的形式很多(在這種情況下你會做的比視頻播放應用程序更多),它會難以序列化所有這些XML文件。這裏是LINQ to XML。即使你沒有在這個應用程序中使用它,你也應該閱讀這個。從LINQ到SQL到LINQ to XML的形式,LINQ都非常有用。

讀自herehere

+0

感謝林克鏈接...我有一些使用它的經驗,絕對看到它的用途。 – Timmoth