在c#中,我可以在编译类型检查一个类是否可序列化吗?

本文关键字:一个 是否 序列化 我可以 编译类型 检查 | 更新日期: 2023-09-27 18:05:54

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

例如,以下代码

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

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

在c#中,我可以在编译类型检查一个类是否可序列化吗?

不,在编译时你什么也做不了。

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

单元测试不如编译时检查好,但总比"实时"进行要好。

无法在编译时确定类型是否可序列化。对于实现ISerializable的类型,这可以通过限制API只接受ISerializable来实现。但是这对于用[Serializable]装饰的类型不起作用,因为你不能约束API接受具有应用于它们的特定属性的类型

相关文章: