如果我在子类中实现了ISerializable接口,那么父类也需要实现吗?

8
我需要在派生类中实现ISerializable(以执行一些自定义的序列化/反序列化),但父类被标记为[Serializable]。 序列化“有效”(我可以序列化和反序列化而不会出现运行时错误),但似乎基类数据没有被保留。
如果我在派生类中实现GetObjectData是否会否定基类的序列化?如果是这样,我是否必须在基类中实现ISerializable,然后在派生类中调用base.GetObjectData(...)以保存数据,还是有比写100次info.AddValue(...)更好的方法?
编辑>谢谢Tim。 您确认了我怀疑的事情。 问题本身又进了一步。 在我的情况下,基类实现了BindingList(T),它本身没有实现ISerializable。
在临时期间,对于每个属性,我将尝试: 在ISerializable构造函数中 base.Property = info.GetValue(...);
并在GetObjectDate中 info.AddValue("name", base.Property);
除非SO社区提出更好的解决方案。
1个回答

6

我是否需要在基类中实现ISerializable,然后在派生类中调用base.GetObjectData(...)?

是的。一旦你实现了ISerializable,任何自动序列化都会被关闭。

同样地,你需要在基类和派生类中都实现受保护的序列化构造函数。


1
非常好的信息,但是如果我的基类本身继承自未实现ISerializable(但标记为[Serializable])的BindingList(T),我该怎么办? - Steven Evers
过去,我通过在自己的序列化构造函数和GetObjectData方法中添加代码来解决这个问题。 - Tim Robinson
是的,根据我的编辑,我认为这也是我决定要做的。我只是希望有一个比这更优雅的解决方案。 - Steven Evers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接