【问题标题】:Custom serializer and inheritence in C#C# 中的自定义序列化程序和继承
【发布时间】:2010-09-22 13:51:26
【问题描述】:

我正在学习 C# 中的序列化,我已经掌握了基础知识,但现在我正在尝试一些更复杂的东西,我正在寻找一些关于最佳实践的指针(我可以实现我想要的,我只是想要知道“正确”/最简单/最少的代码/最健壮的方法)。

我有一条由部分组成的赛道。每个部分类型都继承自一个通用的 TrackSection 类。 TrackSection 类包含大量几何数据和其他我不想保存的数据,并且在调用构造函数时它需要一些上下文信息,因此我实现了 ISerializable 接口并提供了我自己的方法来处理(de ) 序列化。从 TrackSection 继承的类要简单得多,我很乐意自动序列化它们的所有字段,但我假设由于基类是 ISerializable 他们可能也需要手动完成(我添加了反序列化构造函数并在每个中调用基类的反序列化构造函数)。当涉及到序列化时,虽然我不确定该怎么做,但我希望 ISerializable 的 GetObjectData() 方法是虚拟的,因此我可以在子类中扩展序列化。我是否只需要实现我自己的从基类的 GetObjectData() 调用的虚拟方法,还是我做错了?

正如我所说,我可以正常工作,但任何更好的解决方案或任何关于我正在做的事情的一般提示都将不胜感激,因为我不禁觉得我的解决方案比它需要的复杂一点.谢谢。

【问题讨论】:

  • 这里有一个特殊的时刻,当然我可以在基类中将 GetObjectData() 方法标记为虚拟...

标签: c# serialization


【解决方案1】:

除非你正在做一些你需要实现 ISerializable 的事情,否则你可以只用Serializable 属性标记类,并将你不想序列化的字段标记为NonSerialized

【讨论】:

  • 我曾考虑过,但我的构造函数需要一些上下文信息,如果没有自定义方法(可能是存储上下文信息的静态类除外,但这不会'不是线程安全的)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多