我目前使用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