使用DataContractAttribute而不是SerializableAttribute的优势是什么?

时间:2009-12-16 01:46:00

标签: .net wcf serialization attributes datacontract

我发现当涉及的数据类型没有[DataContract][Serializable]而不是{{1}}时,我的WCF服务正常工作。

但是所有的WCF教程都显示了第一个而不是后者。为什么呢?

3 个答案:

答案 0 :(得分:11)

DataContractAttribute使您可以更好地控制通过线路发送的内容,因此您可以选择仅发送给定实体的必要字段。 Serializable使用平台序列化,它假设.NET和线路两端的类型相同(或类似)版本 - 它(通常)序列化所有私有成员,状态等.DCS旨在用于轻量级XML-ish表示您可以控制,XmlSerializer用于XML格式,您可以非常精细地控制(属性数据等)。

答案 1 :(得分:9)

使用[DataContract]标记类是不够的,您还必须使用[DataMember]装饰要序列化的字段。

数据合同是序列化的“选择”模型,其中XML序列号是“选择退出”。

答案 2 :(得分:8)

一个优点是DataContract序列化器比旧的XmlSerializer快得多。

编辑:示例将显示[DataContract]属性,因为它是为WCF使用的DataContractSerializer设计的属性。