我设计了一个具有两个属性的类 - 作为字符串类型和对象列表。我正在加载一些xml并将它反序列化到类的一个实例中,这非常有效。我想要的是每个实例的一切都是不变的。这些类作为API公开,为了完整性,我不希望更改对象的值。如果程序员想要不同的东西,他们应该创建新的实例并设置值。只读(不可变)可序列化类
通常我会用ReadOnlyCollection和readonly属性来做到这一点,但是这会弄乱反序列化。我可以在这里做什么样的事情?
我设计了一个具有两个属性的类 - 作为字符串类型和对象列表。我正在加载一些xml并将它反序列化到类的一个实例中,这非常有效。我想要的是每个实例的一切都是不变的。这些类作为API公开,为了完整性,我不希望更改对象的值。如果程序员想要不同的东西,他们应该创建新的实例并设置值。只读(不可变)可序列化类
通常我会用ReadOnlyCollection和readonly属性来做到这一点,但是这会弄乱反序列化。我可以在这里做什么样的事情?
这不值得污染你的域模型只是更多的XML序列化友好,所以你可以实现ISerializable Interface并编写你自己的序列化例程为任何序列化不友好的集合。
void GetObjectData(SerializationInfo info, StreamingContext context)
{
// ...
}
您可以在班级中实施ISerializable
。这样,当类被反序列化时,一个特殊的构造函数被调用,并且你可以保持你的类真正不可变
实现ISerializable接口并手动执行