8

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

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

4

3 回答 3

11

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

于 2009-12-16T02:32:37.360 回答
9

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

Data Contract 是序列化的“选择加入”模型,其中 XML 序列化器是“选择退出”。

于 2009-12-16T03:37:01.987 回答
8

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

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

于 2009-12-16T02:55:25.207 回答