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

时间:2009-11-24 18:20:24

标签: c# .net wcf serialization

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

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

5 个答案:

答案 0 :(得分:162)

答案 1 :(得分:147)

此外,DataContractSerializer将序列化标记为[Serializable]的项目,并将序列化.NET 3.5 SP1及更高版本中未标记的类型,以支持序列化匿名类型。

所以,这取决于你如何装饰你的班级如何阻止一个成员序列化:

  • 如果您使用了[DataContract],请删除该属性的[DataMember]
  • 如果您使用[Serializable],请在属性的字段前面添加[NonSerialized]
  • 如果您尚未装饰课程,则应将[IgnoreDataMember]添加到该媒体资源中。

答案 2 :(得分:30)

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

这可能对您有用(或者在尝试查找如何在XML中序列化时忽略属性时,任何发现此问题的人都可以使用它。)

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

您所说的与此位置的MSDN库中的内容相冲突:

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

我没有看到您提及的SP1功能。