尽管有一个名为ISerializable
的接口,但当标记为[Serializable]
attribute时似乎目的在于自定义详细信息。如果我理解正确,[Serializable]
属性本身不会触及它所附加的类型,但是在运行时,实现IFormatter
的事物会确定给定对象是否标记为[Serializble]
属性(通过反射?我猜)。 IFormatter.Serializble()
方法也只接受任何Object
。这是否意味着.NET中几乎每个对象都可以序列化?如果不是,是否有办法只采用可序列化的对象,如果传递了不可序列化的对象,则会产生编译时错误?
答案 0 :(得分:5)
否,没有办法对所有可能可序列化的类型执行此操作,除非编写编写自定义的Roslyn分析器以应用所需的确切规则并添加所需的警告。这是很多工作,并且简单地添加涵盖您要支持的序列化方案的单元测试/集成测试可能会更简单。
其他说明:
[Serializable]
是伪属性-实际上它映射到IL标志,而不是常规属性注释,此外,它仅由某些序列化程序使用(很多不是全部)ISerializable
/ IFormatter
API的这是否意味着.NET中几乎每个对象都可以序列化?
不。但是,对于何时可以序列化 的序列化程序,不同的序列化器具有不同的规则,并且这些规则通常是多种多样的……也就是说,它看起来像X 或,就像Y 或,例如Z。因此,唯一接受全部3个元素的API是:object