2010-07-28 21 views
0

我目前正在編寫一個應用程序來管理一些客戶。客戶與訂單有一些關係。你可以想象這就像北風數據庫。我想將數據保存在一個xml文件中。我的應用程序應該讀取,修改和保存數據。我認爲,有兩種方法。第一種方法是使用XmlSerializer類保存,讀取和修改數據。第二種方法是使用LINQ到XML進行操作。我所有的類都是用簡單的C#類編寫的。所以,我不確定。你怎麼看?我應該用什麼來滿足我的需求?序列化與LINQ

在此先感謝!

回答

9

LINQ to XML適用於查詢XML文檔。

如果你正在序列化/反序列化一個對象,我會把它留給XmlSerializer類。

+0

我同意序列化你應該使用XmlSerializer類。 – mpenrow 2010-07-28 17:16:11

+0

@Justin Niessner:你能否提一下爲什麼你認爲XmlSerializer在序列化的情況下比LINQ更好的原因?此外,如果我的類定義和XML模式不會改變,那麼爲什麼不使用LINQ,因爲對象將始終以特定結構序列化? – Learner 2012-06-22 05:18:16

0

您真的確定要爲此使用XML嗎?您可以使用SQL Server Compact Edition將SQL Server功能內置到已編譯的應用程序中,而無需外部佔用空間。數據庫確實比按照您所描述的方式使用XML更好。

+0

是的,我想使用XML格式。 – Carnation 2010-07-28 16:44:57

0

做序列化時有很多事情需要考慮。儘管以下內容與C++有關,但它討論了序列化的一些複雜性以及序列化時要使用的數據結構。

http://www.parashift.com/c++-faq-lite/serialization.html

此外,如果另一個應用程序將要使用輸出序列化,我會避免使用XmlSerializer類和構建自己的架構與數據遷移和記向後兼容性。

0

如果您改變主意以在EF或Linq中設置SQL,Linq to XML會更容易。

0

我會建議您使用DataContractSerializer而不是XmlSerializer。 XmlSerializer的仍然支持,但是,只有嚴重的bug被固定(見10/1/2008到XSD.EXE - Incorrect Class Generated for Abstract Type With Derived Types評論:

不幸的是,我們只有積極主動地固定在XmlSerializer的最關鍵的客戶影響力的問題, XSD.EXE。如果這個問題造成的業務影響,請聯繫Microsoft產品支持服務,我們會很樂意去探索各種選擇。

唯一的缺點,如果它是一個,是XmlSerializer的允許你詳細控制在XML的格式上,如果你只是爲了自己的目的而使用XML,那麼這並不重要,而且速度和特性的改進DataContractSerializer的一套應該對你很有吸引力。

順便說一句,它允許你「兩全其美」。它可以將數據序列化爲二進制形式的XML,它更緊湊,但仍然是XML,可以通過XmlDictionaryReader類(它是一個XmlReader)讀入。