有什么方法可以让WCF在返回时序列化整个类吗?我真的需要在每个属性中都添加DataMember吗?
发布于 2011-04-16 04:12:23
从.NET 3.5 SP1开始,你不再需要这样做了。
如果没有任何[DataContract]和[DataMember]属性,DataContractSerializer类的行为将类似于旧的XmlSerializer:它将序列化类中列出的所有公共读/写属性。
不过,在这个过程中,您确实会丢失一些东西:
[DataMember]属性,因此不能再定义字段的顺序-它们将按出现的顺序序列化[DataMember]不能将属性定义为Required (这将再次出现在[DataMember]属性上)阅读来自Pluralsight的Aaron Skonnard的all about it in detail。
发布于 2011-04-17 06:02:00
我喜欢marc的回答,但我想补充一些信息。
DataContractSerializer和DataContractJsonSerializer都支持开箱即用的许多其他序列化模型。这包括IXmlSerializable、Serializable和ISerializable。.NET 3.5 SP1中添加了对.NET的支持,但从POCO 3开始就一直支持这些其他型号
This blog post详细说明了支持的范围,更重要的是,序列化程序对不同模型的优先级排序(即,它告诉您,如果您有一个用多个序列化模型修饰的类型,那么基于DataContract的序列化程序将执行什么操作)
所以,如果你读了这篇博文,你会注意到POCO支持在优先级列表中排在最后。如果该类型或其父级上绝对没有其他序列化编程模型可用,则它是序列化程序的最后手段。例如,如果类型是某种类型的可枚举类型,它将根据traditional collection rules被序列化。如果它是ISerializable或Serializable,它将根据它们的序列化规则进行序列化。
另一个重要的区别是:在所有其他类型的反序列化过程中,从不调用默认的零参数构造函数。对于POCO类型,它总是被调用!这给了你一个额外的钩子,这是其他序列化模型中不容易做到的!
https://stackoverflow.com/questions/5681842
复制相似问题