【问题标题】:A read only (immutable) serializeable class只读(不可变)可序列化类
【发布时间】:2011-06-11 15:32:22
【问题描述】:

我设计了一个具有两个属性的类——字符串类型和对象列表。我正在加载一些 xml 并将其反序列化为类的实例,效果很好。我想要的是每个实例的所有内容都是不可变的。这些类作为 API 公开,为了完整性,我不希望更改对象的值。如果程序员想要不同的东西,他们应该创建新实例并设置值。

通常我会使用 ReadOnlyCollection 和 readonly 属性来执行此操作,但这会扰乱反序列化。我可以在这里做什么?

【问题讨论】:

    标签: c# immutability


    【解决方案1】:

    污染你的领域模型是不值得的,只是对 xml 序列化器更友好,这样你就可以实现ISerializable Interface 并为任何不适合序列化的集合编写自己的序列化例程。

    void GetObjectData(SerializationInfo info, StreamingContext context)
    {
      // ...
    }
    

    【讨论】:

      【解决方案2】:

      你可以在你的课堂上实现ISerializable。这样,当类被反序列化时,一个特殊的构造函数被调用,你可以让你的类真正不可变

      【讨论】:

        【解决方案3】:

        实现 ISerializable 接口并手动完成

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-12-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-29
          • 2018-08-14
          • 1970-01-01
          相关资源
          最近更新 更多