2

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

例如,这段代码,

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

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

4

2 回答 2

4

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

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

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

于 2013-03-25T21:04:11.350 回答
2

无法在编译时确定类型是否可序列化。对于实现ISerializable这一点的类型,可以通过将 API 限制为仅采用ISerializable. 但这不适用于修饰的类型,[Serializable]因为您无法限制 API 采用具有应用特定属性的类型

于 2013-03-25T21:04:17.323 回答