【问题标题】:What is the preferred way to implement serializable classes in C#在 C# 中实现可序列化类的首选方法是什么
【发布时间】:2010-10-07 17:41:56
【问题描述】:

我已经看到了许多不同的方法来序列化 C# 中的对象,我不确定使用哪一种以及何时使用。

在当前情况下,我正在序列化以通过 WCF 公开,所以我猜测 [DataContract] 属性是要走的路。

目前我正在读取一些 XML,然后通过 WCF 公开生成的对象。因此,我正在反序列化无法访问原始类的 XML(因此我正在重建该类并可以以任何我想要的方式实现序列化)。然后它必须对 WCF 是可序列化的。

但是如果 [DataContract] 适合这种情况,那我为什么不一直使用它来代替 ISerializable 或 [Serializable] 属性呢?

所以有点两个问题合二为一,这个问题用哪个,为什么有不同的序列化方式。

【问题讨论】:

    标签: c# xml wcf serialization datacontract


    【解决方案1】:

    DataContract 是开始基本序列化的好地方。但是,如果您想准确控制对象的序列化方式,请使用 ISerializable 接口。此外,数据协定属性不会被继承,但 ISerializable 会

    ISerializable 自 .net 1.1 以来一直存在。 DataContract 是在 .net 3.0 中引入的,以简化大多数情况下的序列化。

    【讨论】:

      【解决方案2】:

      使用 ISerializable,通过实现 GetObjectData,您可以在对象的类中自定义对象的序列化/反序列化方式,而无需创建序列化器

      如果您创建 WCF 服务,我认为您应该坚持使用 DataContract。它的一大优势是选择加入(即没有坏的意外)机制。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-14
        • 1970-01-01
        • 2011-11-10
        • 1970-01-01
        • 2018-06-15
        • 2014-04-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多