在C#中,我可以在compile-type中检查一个类是否可序列化?

时间:2013-03-25 20:59:44

标签: c# .net serialization compile-time

我在C#中有一个[Serializable]类,它有许多字段,每个字段都是不同的类。我使用序列化来保存/加载这个类的实例,但经常发生这种情况,我忘记在某处添加[Serializable]属性,并且只在运行时学习它。可以在编译期间检查吗?

例如,此代码,

[Serializable]
class House {
 List<Room> Rooms;
}
class Room
{
}

不应该通过验证,因为Room类不可序列化。

2 个答案:

答案 0 :(得分:4)

不,你在编译时无能为力。

但是,为此添加单元测试很容易 - 您可以在程序集中找到每个可序列化的类,并递归查找所有字段并检查每个字段是否可序列化。当然,更简单的方法就是序列化一个实例:)

单元测试不如编译时检查,但它只比“实时”更好。

答案 1 :(得分:2)

在编译时无法确定类型是否可序列化。对于实现ISerializable的类型,可以通过将API限制为仅ISerializable来完成。但这不适用于使用[Serializable]修饰的类型,因为您无法限制API以获取应用了特定属性的类型