【发布时间】:2012-09-02 00:45:55
【问题描述】:
我可以避免向类添加额外的字段来存储仅用于反序列化/序列化的数据吗?
假设我有一些课程:
[Serializable]
class MyClass {
[NonSerialized]
NonSerializableDataType myField;
SomeOtherDataType serializableTemporaryData;
[OnSerializing]
OnSerializing (StreamingContext context) {
// build serializableTemporaryData from myField
}
[OnDeserialized]
void OnDeserialized (StreamingContext context) {
// build myField from serializableTemporaryData
}
}
有什么方法可以避免MyClass 的每个对象中都有serializableTemporaryData 字段?例如,我可以将其设为静态(可能通过更改我的 On... 方法)吗?
约束:我无法更改NonSerializableDataType 的实现。
示例:假设 myField 包含一个资源句柄。然后,在序列化时,我必须存储一些反序列化后如何获取资源的信息,但我不能存储句柄本身。如果我将句柄包装到另一个类中,那么我只是将问题转移到了包装类——然后我会为包装类提出同样的问题。
【问题讨论】:
-
在这里制作静态是个坏主意。考虑两个线程作用于同一类的两个对象,进行序列化。
-
您使用的是哪个序列化程序? xml还是二进制?还有,
NonSerializableDataType不能改,但是可以继承吗? -
为什么每次都需要存储又不能生产?
-
如果有帮助,我可以将字段设为 ThreadStatic。不,我不能对 NonSerializableDataType 做 任何事情,除非使用它。这是二进制序列化。我需要存储它,因为我无法在没有任何信息的情况下生成它,即我需要存储一些关于如何生成实际对象的信息。
标签: c# serialization deserialization binaryformatter