【问题标题】:What is the advantage of using DataContractAttribute over SerializableAttribute?与 SerializableAttribute 相比,使用 DataContractAttribute 有什么优势?
【发布时间】:2010-12-27 01:46:03
【问题描述】:

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

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

【问题讨论】:

    标签: .net wcf serialization attributes datacontract


    【解决方案1】:

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

    【讨论】:

    • 实际上,XML 序列化程序为您提供了更多关于如何通过网络表示数据的选项。 Data Contract 序列化程序的最大优势是速度,但它是以灵活性为代价的。
    • 实际上 DataContract 让您几乎无法控制有线格式。通过实现 ISerializable,您可以像使用 DataContract 一样控制序列化。但是使用 XmlSerializer (我不能从 OP 的问题中真正看出)提供了更多的控制权。但正如 Doug 所说,DataContract 的速度要快很多。
    【解决方案2】:

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

    数据协定是一种“选择加入”序列化模型,其中 XML 序列化器是“选择退出”。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 这是主要的好处。您没有获得 XML 序列化程序的灵活性,但在 99% 的情况下,数据协定序列化程序为您提供的东西已经足够好了。
      • 明确地说,我不知道 Jader 是否在询问 XmlSerializer。可以不使用 XmlSerializer 格式将类型标记为 [Serializable]。
      • Josh:是的,但如果它被标记为 Serializable WCF 将使用 XML 序列化程序,除非您使用自定义行为进行更改。
      猜你喜欢
      • 2010-09-24
      • 2015-04-06
      • 2013-05-09
      • 2017-05-29
      • 2017-11-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      相关资源
      最近更新 更多