如何在序列化一棵简单对象树时选择Xml序列化、DataContractSerializer和LINQ to XML?

4
我需要将一棵简单对象的树序列化为XML并存储到文件中。自从我上次这样做以来,世界发生了变化...
(我不关心XML的模式,只要支持人员能够理解该文件即可)
那么,在选择.NET中不同的“易于使用的XML” API时需要考虑哪些权衡?

请查看第3、4点清单。在这里,他们定义了自定义方法:http://www.dotnetjohn.com/articles.aspx?articleid=173 - Anand Thangappan
2个回答

4
这是我对这3个选项的想法:
LINQ to XML - 对XML和对象设计具有完全控制权,代码最多。
DataContractSerializer - 对XML几乎没有控制权,但可以处理大多数对象。
XmlSerializer - 对XML具有完全控制权,但必须以Xml序列化喜欢的方式设计对象。

1
另一个方面是XmlSerializer基本上已经被冻结 - 可能不会有新的开发,只有最关键的错误修复。 - John Saunders

3

DataContractSerializer并不一定会生成“典型”的xml,而且您对输出的控制很有限。但是,如果需要完整图形,则支持它。如果您想要xml,并且不需要完整图形,则我倾向于使用XmlSerializer - 它将避免编写任何手动遍历数据的代码(如XmlDocumentXDocument),但仍然给您控制权。

一个警告: XmlSerializer 对您的类型有要求(public,public无参数构造函数,限于public成员,没有序列化回调等)。通常它们不是问题。

但是,我可能会写二进制而不是xml;p(只是不用BinaryFormatter,因为它有....小毛病)。


谢谢,XmlSerializer似乎仍然存在不可变对象的问题,但这是我过去一直使用的。数据是带有自定义编辑器的“配置数据”,非常小,没有必要使用二进制。 - Ian Ringrose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接