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

Not*_*Dan 115 .net c# wcf serialization

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

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

Pau*_*ane 169

IgnoreDataMemberAttribute

  • 我的域层没有正确的程序集引用,然后我错过了阅读文档并最终认为它是.NET 4.5的新功能.试图找回这个线程删除我的评论没有成功(匆忙).此外,看看这个答案的日期应该有一个响铃.... 2009 .NET 4.5 post ...)抱歉浪费你的时间. (5认同)
  • 一个简短的例子不会让这个答案真的值得投票吗? (4认同)
  • 这个答案是不完整的,因此具有误导性。如果类具有“[Serialized]”属性,“[IgnoreDataMember]”将不起作用。请参阅[Doug](/sf/answers/125443601/)的答案中的详细信息。 (3认同)
  • 在 .NET 4.5 上:System.Runtime.Serialization.IgnoreDataMemberAttribute 适用于任何事情 (2认同)

Dou*_*oug 155

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

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

  • 如果您使用[DataContract],则删除[DataMember]属性.
  • 如果您使用过[Serializable],则[NonSerialized]在该字段前添加该属性.
  • 如果您没有装饰您的课程,那么您应该添加[IgnoreDataMember]到该属性.

  • 这比公认的答案更有用. (6认同)
  • @Daniel:对于自​​动生成的属性,请使用“[field:NonSerialized]”。 (3认同)
  • 请解释一下“装饰你的课堂”是什么意思? (2认同)

Kri*_*ams 31

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

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

  • 这个答案正是我想要的 (8认同)
  • 啊投反对票.只是想我会发布,因为当我在序列化类时搜索如何忽略属性时,这篇文章出现了.我想把它放在这里,如果有人发现这个帖子的方式和我一样. (4认同)