我目前使用LINQ查詢來讀取XML文件,例如C#XmlSerializer:保留該值,覆蓋元素標籤
<MyObjects>
<MyObject>
<MyElement>some_text</MyElement>
<MyOtherElement>some_more_text</MyOtherElement>
</MyObject>
</MyObjects>
到包含自定義HistoryString
屬性的自定義對象列表。 HistoryString
包含2個字符串,currentValue
和previousValue
。
這一切工作使用的XmlSerializer寫的自定義對象返回到一個XML文件時,除了大,輸出相當明顯包含附加標籤,即
<MyObjects>
<MyObject>
<MyElement>
<currentValue>some_text</currentValue>
<previousValue>some_text</previousValue>
</MyElement>
<MyOtherElement>
<currentValue>some_more_text</currentValue>
<previousValue>some_more_text</previousValue>
</MyOtherElement>
</MyObject>
</MyObjects>
問:什麼是最巧妙的和/或最基於這種基本差異,以相同的格式讀取和寫入XML的高效方式?
一些初步的想法:
1)標記previousValue
財產與[System.Xml.Serialization.XmlIgnore]
然後通過將被寫入刪除和<currentValue>
所有痕跡</currentValue>
2)打開現有的文件和XML字符串掃手動進行更新/刪除/添加 - 這肯定會更長。
3)HistoryString
自動解析爲currentValue
而不是序列化其每個屬性的任何方式,類似於ToString()的工作方式?
我已經做了一些研究,包括有用的MSDN文章here和here但我看不到任何其他屬性可以解決這個問題,我仍然不確定這是否可能。有任何想法嗎?
聽起來對我很好,我對LINQ相當陌生,所以讓我看看我是否可以沙沙作響。 目前我正在做XElement.Load(路徑),然後建立一個查詢的方式,但在回來的路上,只是使用XmlSerializer將它們序列化爲StreamWriter。 – 2011-12-16 12:35:47
如果你有原始xml的模式(我懷疑你使用linq查詢它的時候會這樣做),你可以使用XmlSerializer將列表轉換回xml,它只是將你的hsitory列表轉換爲一個「原創「的對象,這些都是linq爲你所做的。 – mmix 2011-12-16 12:39:38