我必须在派生类中实现ISerializable(进行一些自定义序列化/反序列化),但父类被标记为[Serializable]。序列化“工作”(我可以序列化和反序列化,没有运行时错误),但看起来基类数据没有被保留。
我是否在派生类中实现了GetObjectData,从而否定了基类的序列化?如果是这样,我是否必须在基类中实现ISerializable,然后在派生类中调用base.GetObjectData(...)来保存数据,或者有比编写info.AddValue(...)更好的方法100次?
编辑>谢谢蒂姆。你证实了我的怀疑。问题本身更进了一步。在我的情况下,基类实现了BindingList(T),它自己不实现ISerializable。
在此期间,对于每个房产,我会尝试: 在ISerializable构造函数中 base.Property = info.GetValue(...);
并在GetObjectDate中 info.AddValue(“name”,base.Property);
除非精彩的SO社区提出更好的解决方案。
答案 0 :(得分:6)
我是否必须在基类中实现ISerializable,然后在派生类中调用base.GetObjectData(...)
是。一旦实施ISerializable
,任何自动序列化都会被关闭。
同样,您需要在基类和派生类中实现受保护的序列化构造函数。