【发布时间】:2011-12-16 12:22:23
【问题描述】:
我目前正在使用 LINQ 查询来读取 XML 文件,例如
<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) 用[System.Xml.Serialization.XmlIgnore] 标记previousValue 属性,然后扫描要写入的XML 字符串,删除<currentValue> 和</currentValue> 的所有痕迹
2) 打开现有文件并手动进行任何更新/删除/添加 - 这肯定更冗长。
3) 有什么方法可以让HistoryString 自动解析为它的currentValue,而不是像 ToString() 的工作方式那样序列化它的每个属性?
我对此进行了一些研究,包括有用的 MSDN 文章 here 和 here 但我看不到任何其他可以解决此问题的属性,我仍然不确定这是否可能。有什么想法吗?
【问题讨论】:
标签: c# xml xml-serialization