2010-11-02 42 views
1

在c#中獲取對象的XML表示的最簡單方法是什麼? 我知道你可以使用XmlSerializer,但我不知道是否有更好的方法。用c#獲取對象的xml表示的最佳方式?

我可以以某種方式使用LINQ嗎?

更新:通過最好的我的意思是我可以使用它與不可變的對象,我不需要做一個沒有準則的構造函數。

回答

0

希望這個例子可以幫助 - 包括使用LINQ對XML序列化和反序列化:

http://thecodeslinger.wordpress.com/2007/12/17/custom-xml-serialization-with-linq/

也有LINQ到XSD(它在孵化,不知道這對你很重要 - 它不我...):

http://www.hanselman.com/blog/LINQToEverythingLINQToXSDAddsMoreLINQiness.aspx

斯科特Hanselman的讓此評論:

LINQ to XSD使用(老化的)XSD.exe創建的.NET類與 的保真度比創建的 好得多。

下載鏈接在這裏:

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a45f58cd-fcfc-439e-b735-8182775560af&displaylang=en

1

這實際上取決於你的意思是「更好」。我個人喜歡使用LINQ to XML來定製對象的序列化。它使您可以完全控制序列化(允許您隨時間輕鬆更改模式,有可能保留當前代碼版本無法理解的元素或屬性),同時代碼緊湊。

我已經在幾個地方使用了這個,並且對結果感到滿意。對於非常大且複雜的類型來說,這確實是一件痛苦的事情 - 但對於合理簡單的數據結構來說,它非常棒。

我個人不太喜歡依賴像XmlSerializer和BinarySerializer這樣的東西。他們傾向於給你只是不夠完善的控制做你想做的一切,或者添加像無參數構造函數的額外要求。

+0

你能不能舉個例子?我在使用XmlSerializer時遇到問題,因爲它需要讀/寫公共字段。但我想擁有一個不可改變的結構。 – 2010-11-02 19:59:27

+0

@wcf guru needed:在這種情況下,您可能會編寫一個採用XElement的構造函數或一個名爲FromXElement的靜態方法,該方法會適當地創建一個實例。你還要創建一個執行序列化的'ToXElement'實例方法。不變性絕對是手卷方法的好處之一。 – 2010-11-02 20:01:17

+0

我只能找到使用LINQ從xml創建對象的引用,而不是從對象創建XML的另一種方式。你能指點我一個參考或函數名稱開始?將不勝感激。 – 2010-11-02 20:05:42

相關問題