我发现当涉及的数据类型没有[DataContract]
但[Serializable]
而不是{{1}}时,我的WCF服务正常工作。
但是所有的WCF教程都显示了第一个而不是后者。为什么呢?
答案 0 :(得分:11)
DataContractAttribute使您可以更好地控制通过线路发送的内容,因此您可以选择仅发送给定实体的必要字段。 Serializable使用平台序列化,它假设.NET和线路两端的类型相同(或类似)版本 - 它(通常)序列化所有私有成员,状态等.DCS旨在用于轻量级XML-ish表示您可以控制,XmlSerializer用于XML格式,您可以非常精细地控制(属性数据等)。
答案 1 :(得分:9)
使用[DataContract]标记类是不够的,您还必须使用[DataMember]装饰要序列化的字段。
数据合同是序列化的“选择”模型,其中XML序列号是“选择退出”。
答案 2 :(得分:8)
一个优点是DataContract序列化器比旧的XmlSerializer快得多。
编辑:示例将显示[DataContract]属性,因为它是为WCF使用的DataContractSerializer设计的属性。