繁体   English   中英

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

[英]How can I ignore a property when serializing using the DataContractSerializer?

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

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

您可能正在寻找IgnoreDataMemberAttribute

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM