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

本文关键字:序列化 不可变 只读 | 更新日期: 2023-09-27 17:58:52

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

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

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

不值得污染您的域模型,只需要对xml序列化程序更友好,这样您就可以实现ISerializable接口,并为任何不友好序列化的集合编写自己的序列化例程。

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

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

实现ISerializable接口并手动完成