DataContractSerializer是一个选择性序列化器。如何让它退出?

时间:2013-11-13 21:35:48

标签: c# .net wcf serialization datacontractserializer

我继承了一些具有大量属性的类。我希望能够为WCF序列化它们。

由于DataContractSerializer是一个选择性序列化程序,我需要用DataMember属性来装饰所有属性,这在我看来有点麻烦。我没有其他方法可以将DataMember添加到所有属性中吗?

请注意,我的大部分属性都需要序列化。

4 个答案:

答案 0 :(得分:0)

这取决于您的属性是否可以自动生成 - 如果是,您可以简单地替换WCF序列化程序。通常这样做是为了使用JSON.NET:

C# WCF REST - How do you use JSON.Net serializer instead of the default DataContractSerializer?

答案 1 :(得分:0)

这就是MSDN链接here上指示的设计方式。另一种方法是使用XmlSerializer来序列化所有公共字段/属性。最后,考虑到DataContractSerializer和另一种方法,你必须权衡利弊。

答案 2 :(得分:0)

您无法使用任何常见的序列化属性(即[DataContract] / [Serializable])标记您的类,并确保您要序列化的所有属性都是公开的get和{ {1}}。如果要排除某个属性,则需要使用[IgnoreDataMember]属性对其进行标记。

示例:

set

来自Serializable Types on MSDN

  

您可以应用DataContractAttribute和DataMemberAttribute属性...但是,即使未标记这些属性的类型也会被序列化和反序列化。以下规则和例外适用:...
  除非您将IgnoreDataMemberAttribute属性应用于该成员,否则将序列化所有公共字段以及具有公共get和set方法的属性。

答案 3 :(得分:0)

dotnet 4.0 及以上,

您可以避免[DataContract]属性制作所有public数据名称serializable