Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/122.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中,我可以在编译类型检查类是否可序列化吗?_C#_.net_Serialization_Compile Time - Fatal编程技术网

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

在C#中,我可以在编译类型检查类是否可序列化吗?,c#,.net,serialization,compile-time,C#,.net,Serialization,Compile Time,我在C#中有一个[Serializable]类,它有许多字段,每个字段都是不同的类。我使用序列化来保存/加载这个类的实例,但我经常忘记在某个地方添加[Serializable]属性,而只是在运行时才知道这一点。在编译过程中可以检查这一点吗 比如这个代码, [Serializable] class House { List<Room> Rooms; } class Room { } [可序列化] 班房{ 列出会议室名单; } 教室 { } 不应通过验证,因为Room类不可序列化。

我在C#中有一个[Serializable]类,它有许多字段,每个字段都是不同的类。我使用序列化来保存/加载这个类的实例,但我经常忘记在某个地方添加[Serializable]属性,而只是在运行时才知道这一点。在编译过程中可以检查这一点吗

比如这个代码,

[Serializable]
class House {
 List<Room> Rooms;
}
class Room
{
}
[可序列化]
班房{
列出会议室名单;
}
教室
{
}

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

不,在编译时无法执行任何操作

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


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

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

@MatthewWatson:您不能在编译时使用反射。@MatthewWatson编译时可以检查这一点吗?哎呀,误读了!我已将其删除。:)正如在另一个问题中提到的,您可以使用定制的FxCop规则来完成。