【发布时间】:2014-01-27 09:18:16
【问题描述】:
在可序列化类中使用只读字段时,不应序列化(或不需要):如何恢复它们?假设以下代码:
[Serializable]
class SerializableClass
{
[NonSerialized]
private readonly object someLock = new object();
[OnDeserializing]
private void restore(StreamingContext sc)
{
// cannot one-time-access readonly fields (like in a
// constructor or shortcut like above), too sad...
// someLock = new object();
}
// ...
}
我遇到了一些用于锁定的对象(专门用于锁定)的问题,这些对象始终为private readonly(我认为在序列化表示中没有位置)。作为一种解决方法,我问自己:
- 这些对象不应该是只读的,以便可以恢复吗?
- 我是否应该将它们包括在内以进行序列化(只要这些只是一些“空对象”)?
但是对于只读字段的使用可能有更通用的解决方案,例如:
- 有没有一种方法可以在不丢失字段自动序列化的情况下实现被调用的反序列化构造函数(例如在实现
ISerializable时)?
非常感谢。
【问题讨论】:
标签: c# constructor locking deserialization readonly