DataContracts和DataMembers

| 有什么方法可以让WCF在返回时对整个类进行序列化?我真的必须将DataMember添加到每个属性吗?     
已邀请:
从.NET 3.5 SP1开始,您不再需要这样做。 如果没有任何“ 0”和“ 1”属性,则DataContractSerializer类的行为将与旧的XmlSerializer相似:它将序列化该类中列出的所有公共读/写属性。 但是,您在此过程中确实会丢失一些东西: 由于您没有
[DataMember]
属性,因此无法再定义字段的顺序-它们将按照出现的顺序进行序列化 您不能省略公共财产(因为在所有其他财产/字段上都需要
[DataMember]
) 您不能将属性定义为
Required
(该属性将再次位于
[DataMember]
属性上) 您的课程现在需要有一个公共的,无参数的构造函数(通常不需要数据协定) 可以从Pluralsight的Aaron Skonnard详细了解所有内容。     
我喜欢马克的答案,但我想补充一些信息。 DataContractSerializer和DataContractJsonSerializer都支持开箱即用的许多其他序列化模型。这包括IXmlSerializable,Serializable和ISerializable。 .NET 3.5 SP1中添加了POCO支持,但是自.NET 3开始,对这些其他模型的支持一直存在。 这篇博客文章详细介绍了支持的程度,更重要的是,序列化程序对不同模型的优先级排序(即,它告诉您如果您的一种类型装饰有多个序列化模型,则基于DataContract的序列化程序将执行什么操作) 因此,如果您阅读该博客文章,则会注意到POCO支持在优先级列表中排在最后。如果类型或它的父级上绝对没有其他序列化编程模型,则这是序列化器的最后选择。例如,如果类型是某种可枚举的类型,则它将根据传统的收集规则进行序列化。如果它是ISerializable或Serializable,它将根据其序列化规则进行序列化。 另一个重要的区别:在所有其他类型的反序列化期间,永远不会调用默认的零参数构造函数。对于POCO类型,它总是被调用!这为您提供了其他序列化模型中没有的附加钩子!     

要回复问题请先登录注册