广义XML序列化

时间:2010-06-13 12:02:57

标签: .net properties xml-serialization

我为问一个可能曾被问过数百次的问题而道歉,但我似乎无法在档案中找到答案;可能是因为我的问题太基础了。

我知道默认情况下,XML序列化只会触及公共成员和属性。属性经常掩盖私有变量;特别是如果他们是只读的话。序列化这些很好;实例向世界公开的值是XML中的内容。但是,如果相同数据的反序列化不能将值放回原来的位置,那么这样做的重点是什么?关于XML序列化通常如何用于具有屏蔽属性的类,我是否缺少一些东西?当然不可能唯一的答案是明确实现Read / WriteXML - 因为这比它的价值更多的努力!

1 个答案:

答案 0 :(得分:3)

你是对的,但我认为你失去了对所有影响的概述。 ;-)如果您明确定义,无法编写属性,很明显您无法反序列化它。至少不是默认方式。您有不同的选择来解决这个问题:

  • 显然你想写属性,所以你应该考虑让它成为可写的。不时太偏执是好的。

  • 大多数情况下,属性必须是只读的是计算属性的情况。但这些根本不需要序列化。所以用XmlIgnore标记它们就完成了。

  • 您可以将覆盖传递给XmlSerializer。不知道它们有多么强大,但你可能会看一下文档。通常它们用于修改无法修改的类型的序列化行为(即无法添加属性)。

  • 如果上述解决方案不起作用,您可能必须实现Read / WriteXml。