.net 广义XML序列化

.net 广义XML序列化,.net,properties,xml-serialization,.net,Properties,Xml Serialization,我很抱歉问了一个以前可能被问过几百次的问题,但我似乎无法在档案中找到答案;可能是因为我的问题太基本了 我知道默认情况下XML序列化只涉及公共成员和属性。属性通常会屏蔽一个私有变量;特别是如果它们是只读的。序列化这些是好的;实例向世界公开的值就是进入XML的值。但是,如果相同数据的反序列化不能将值放回它所属的位置,那么这样做的意义何在?关于XML序列化通常如何用于具有屏蔽属性的类,我缺少什么吗?当然,唯一的答案不可能是显式地实现读/写XML——因为这比它值得付出的努力还要多 你是对的,但我认为你失

我很抱歉问了一个以前可能被问过几百次的问题,但我似乎无法在档案中找到答案;可能是因为我的问题太基本了


我知道默认情况下XML序列化只涉及公共成员和属性。属性通常会屏蔽一个私有变量;特别是如果它们是只读的。序列化这些是好的;实例向世界公开的值就是进入XML的值。但是,如果相同数据的反序列化不能将值放回它所属的位置,那么这样做的意义何在?关于XML序列化通常如何用于具有屏蔽属性的类,我缺少什么吗?当然,唯一的答案不可能是显式地实现读/写XML——因为这比它值得付出的努力还要多

你是对的,但我认为你失去了对所有含义的概述。;-)如果显式定义属性无法写入,则显然无法对其进行反序列化。至少不是以默认方式。您有不同的选项来解决此问题:

  • 显然,您希望写入属性,因此应该考虑使其可写。有时不要太偏执是好的

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

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

  • 如果上述解决方案不起作用,您可能必须实现读/写XML


    • 你是对的,但我认为你失去了对所有含义的概述。;-)如果显式定义属性无法写入,则显然无法对其进行反序列化。至少不是以默认方式。您有不同的选项来解决此问题:

      • 显然,您希望写入属性,因此应该考虑使其可写。有时不要太偏执是好的

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

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

      • 如果上述解决方案不起作用,您可能必须实现读/写XML


      我想你是对的——我对滥用我的课程非常怀疑。如果操纵它可能会破坏实例的状态,那么任何东西都不会向外界公开为可写。我的保留可能是因为我在试验玩具模型,而不是生产实现——并且没有看到实际的实用性。我想你是对的——我对滥用我的类非常偏执。如果操纵它可能会破坏实例的状态,那么任何东西都不会向外界公开为可写。我的保留可能是因为我在试验玩具模型,而不是生产实现,并且没有看到实际的效用。