我继承了一些具有大量属性的类。我希望能够将它们序列化为WCF
.
作为DataContractSerializer
一个可选的序列化程序,我需要用属性装饰所有DataMember
属性,这在我看来有点麻烦。难道我没有任何其他方法可以让我不必添加DataMember
到所有属性吗?
请注意,我的大部分属性都需要序列化。
我继承了一些具有大量属性的类。我希望能够将它们序列化为WCF
.
作为DataContractSerializer
一个可选的序列化程序,我需要用属性装饰所有DataMember
属性,这在我看来有点麻烦。难道我没有任何其他方法可以让我不必添加DataMember
到所有属性吗?
请注意,我的大部分属性都需要序列化。
[DataContract]
您可以简单地不使用任何常见的序列化属性(即/ )标记您的类,[Serializable]
并确保要序列化的所有属性都是公共的get
,并且set
. 如果要排除某个属性,则需要使用[IgnoreDataMember]
属性对其进行标记。
例子:
public class Hamster
{
public string Name { get; set; }
[IgnoreDataMember]
public int Age { get; set; }
}
您可以应用 DataContractAttribute 和 DataMemberAttribute 属性...但是,即使是没有用这些属性标记的类型也会被序列化和反序列化。以下规则和例外适用: ...
所有公共字段以及具有公共 get 和 set 方法的属性都将被序列化,除非您将 IgnoreDataMemberAttribute 特性应用于该成员。
这取决于您的属性是否可以自动生成 - 如果可以,您可以简单地替换 WCF 序列化程序。通常这样做是为了使用 JSON.NET:
C# WCF REST - 如何使用 JSON.Net 序列化程序而不是默认的 DataContractSerializer?
这就是它的设计方式,如这里 MSDN 链接所示。另一种选择是使用 XmlSerializer 序列化所有公共字段/属性。最终,您必须权衡考虑 DataContractSerializer 与其他方法的利弊。
从dotnet 4.0及更高版本,
您可以避免使用该[DataContract]
属性来制作所有public
数据成员serializable
。