我继承了一些具有大量属性的类。我希望能够为WCF
序列化它们。
由于DataContractSerializer
是一个选择性序列化程序,我需要用DataMember
属性来装饰所有属性,这在我看来有点麻烦。我没有其他方法可以将DataMember
添加到所有属性中吗?
请注意,我的大部分属性都需要序列化。
答案 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
您可以应用DataContractAttribute和DataMemberAttribute属性...但是,即使未标记这些属性的类型也会被序列化和反序列化。以下规则和例外适用:...
除非您将IgnoreDataMemberAttribute属性应用于该成员,否则将序列化所有公共字段以及具有公共get和set方法的属性。
答案 3 :(得分:0)
从 dotnet 4.0 及以上,
您可以避免[DataContract]
属性制作所有public
数据名称serializable
。