强制执行子类必须在.net中可序列化

Ada*_*dam 5 .net vb.net serialization

我有一个vb.net web API中的类,我有时需要序列化.所以,我把班级标记为<Serializable>.精细.但是,它在许多层面上都有许多子类.其中一些被遗漏(或gwet错过了新的添加).如果元素为null则没问题,但如果不是则序列化失败:

[SerializationException]在Assembly'Foo,Version = 1.0.0.4866,Culture = neutral,PublicKeyToken = null'中键入'Foo.Bar'未标记为可序列化.

由于序列化是在后台使用的,为了保存状态以便以后恢复,它并不总是立即被注意到.

序列化正在使用BinaryFormatterin vb.net

有没有办法标记父类,以便所有它的子(以及它们的子项等)也必须是可序列化的?我宁愿为此获得编译时错误,而不是运行时错误.

我从一些初步的回答中意识到我的问题不够明确.我不应该使用父母孩子这两个词,因为我并不专注于继承作为班级成员的班级

<Serializable()>
Class MyObj
  Public Property foo as new Foo
  Public Property bar as new Bar
end Class
Run Code Online (Sandbox Code Playgroud)

我曾预料到这将需要Foo并且Bar可序列化,否则MyObj 不是

Mar*_*ell 6

不,这不是你可以简单执行的事情.您最好的选择可能是添加一个单元测试,通过反射发现子类,并检查它们是否具有属性,如果缺少则失败.

但是,我也建议不要使用BinaryFormatter.我见过的方式太多的人被伤害-它关系类型和序列化数据一起得太紧..NET中有许多更好的序列化选项,适用于基于文本和二进制序列化格式.