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

Jad*_*ias 8 .net wcf serialization attributes datacontract

我发现我的WCF服务在涉及的数据类型没有的时候正常工作[DataContract],而是[Serializable]相反.

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

nit*_*one 11

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

  • 实际上,XML序列化器为您提供了更多选项,让您了解如何通过网络表示数据.数据合同序列化器的一大优势是速度,但它的灵活性代价. (3认同)

Jam*_*der 9

用[DataContract]标记类是不够的,你必须用[DataMember]装饰你想要序列化的字段.

数据契约是序列化的"选择"模型,其中XML序列化是"选择退出".


Dou*_*son 8

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

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