【问题标题】:In C#, can I check at compile-type whether a class is serializable? [duplicate]在 C# 中,我可以在编译类型检查一个类是否可序列化? [复制]
【发布时间】:2013-03-15 12:21:48
【问题描述】:

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

比如这段代码,

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

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

【问题讨论】:

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

标签: c# .net serialization compile-time


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2010-09-19
      • 2015-09-08
      • 1970-01-01
      • 2013-10-02
      • 2016-05-04
      • 2013-07-14
      • 2011-01-25
      相关资源
      最近更新 更多