首页 文章

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

提问于
浏览
101

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

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

5 回答

  • 155

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

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

    我没有看到你提到的SP1功能 .

  • 2
  • 133

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

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

    • 如果您使用了 [DataContract] ,则删除该属性的 [DataMember] .

    • 如果您使用了 [Serializable] ,则在该字段的字段前面添加 [NonSerialized] .

    • 如果您没有装饰您的课程,那么您应该将 [IgnoreDataMember] 添加到该属性 .

  • 0

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

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

  • 27

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

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

相关问题