使用 DataContractSerializer 序列化时如何忽略属性?

我在吸毒。NET 3.5 SP1和 DataContractSerializer来序列化一个类。在 SP1中,它们改变了行为,这样您就不必在类中包含 DataContract/DataMember属性,它只需序列化整个事件。这是我正在使用的行为,但是现在我需要忽略序列化程序中的一个属性。我知道一种方法是将 DataContract属性添加到类中,并将 DataMember属性放在我想要包含的所有成员上。不过,我有理由认为,这对我不起作用。

所以我的问题是,有没有一个属性或者其他东西我可以用来让 DataContractSerializer忽略一个属性?

190775 次浏览

你所说的与 MSDN 库中在这个位置所说的相矛盾:

Http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractserializer.aspx

我没有看到任何提到您提到的 SP1特性的内容。

此外,DataContractSerializer 将序列化标记为[ Serializer ]的项,还将序列化。NET 3.5 SP1及更高版本,以支持序列化匿名类型。

因此,这取决于如何装饰类,以防止成员序列化:

  • 如果使用了 [DataContract],则删除该属性的 [DataMember]
  • 如果使用的是 [Serializable],那么在属性的 场地前面添加 [NonSerialized]
  • 如果您还没有装饰您的类,那么您应该将 [IgnoreDataMember]添加到属性中。

尝试用[ NonSerialization ()]属性标记该字段。这将告诉序列化程序忽略该字段。

Https://msdn.microsoft.com/en-us/library/system.nonserializedattribute(v=vs.110).aspx

在 XML 序列化中,可以使用[ XmlIgnore ]属性(System。Xml.序列化。XmlIgnoreAttribute)在序列化类时忽略属性。

这可能对您有用(或者对任何试图找出在 XML 中序列化时如何忽略属性(就像我一样)时发现这个问题的人可能有用)。