只读(不可变)可序列化类

时间:2011-06-11 15:32:23

标签: c# immutability

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

通常我会使用ReadOnlyCollection和readonly属性执行此操作,但这会影响反序列化。我可以在这做什么样的事情?

3 个答案:

答案 0 :(得分:2)

不值得污染您的域模型只是为了更友好的xml序列化程序,因此您可以实现ISerializable Interface并为任何非序列化友好的集合编写自己的序列化例程。

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

答案 1 :(得分:0)

您可以在班级中实施ISerializable。这样,当反序列化类时,会调用一个特殊的构造函数,你可以保持你的类真正不可变

答案 2 :(得分:0)

实施ISerializable接口并手动执行