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

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

所以我的问题是,是否有一个属性或我可以用来使DataContractSerializer忽略一个属性?

IgnoreDataMemberAttribute ?

此外,DataContractSerializer将序列化标记为[Serializable]的项目,并将在.NET 3.5 SP1和更高版本中对未标记的types进行序列化,以支持序列化匿名types。

所以,这取决于你如何装饰你的类,以便如何保持成员序列化:

  • 如果您使用[DataContract] ,则删除该属性的[DataMember]
  • 如果使用[Serializable] ,则在属性的字段前添加[NonSerialized]
  • 如果你还没有装饰你的类,那么你应该添加[IgnoreDataMember]属性。

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

这可能对你有用(或者,当试图找出如何在XML中进行序列化时发现如何忽略某个属性时,发现此问题的任何人都可以使用它)。

你所说的是与它在这个位置的MSDN库中所说的相冲突的:

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

我没有看到你提到的SP1function的提及。

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

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