【问题标题】:Auto implemented properties and serialization自动实现的属性和序列化
【发布时间】:2012-02-02 15:58:57
【问题描述】:

我正在经历大量的代码和标记类,现在我想用序列化属性保留这些类。我还没有编写二进制序列化/反序列化引擎,所以猜想我会在完成后回答我自己的问题! - 但我想如果可以的话,我会尝试在这里得到更早的回复。我遇到了一些包含以下属性的代码:

    public string Id
    {
        get;
        set;
    }

“Id”是否被序列化?我知道在编译器下面会自动创建一个类成员,但这是否正确序列化(因为类实例的所有数据成员都写入存储)?感觉不会,因为您不能将 Serialized/NonSerialized 属性放在属性上。

提前致谢。

【问题讨论】:

  • “这取决于”您使用的序列化。运行时序列化、XML序列化、数据契约序列化在这方面都是不同的。
  • 你打算如何序列化你的课程?
  • @John:我将使用二进制序列化
  • 为什么?数据契约序列化器可以将 XML 写成二进制,我相信它可能会更快。
  • @John:谢谢,我会调查一下

标签: c# .net serialization


【解决方案1】:

您可以使用[field:NonSerialized] 属性将events 的支持字段标记为不可序列化,但似乎使用自动属性是不可能的。使用自动属性,支持字段将被序列化,防止这种行为的唯一方法是将它们转换为常规属性,并像往常一样使用 [NonSerialized] 注释显式支持字段。

【讨论】:

    【解决方案2】:

    正如@John 在他的 cmets 中指出的那样,BinaryFormatter (System.Runtime.Serialization.Formatters.Binary) 将序列化您自动生成的支持字段。您可以通过实现ISerializable 接口来使用自定义序列化,然后为您的类决定哪些值被序列化或不被序列化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 1970-01-01
      • 2010-10-31
      相关资源
      最近更新 更多