我如何制作一种仅采用可序列化对象的方法



尽管有一个名为 ISerializable的接口,但在标记类型为 [Serializable]属性时,似乎目的是自定义详细信息。如果我正确理解的话,[Serializable]属性本身不会触摸所附加到的类型上的任何内容,而是在实现IFormatter的运行时间内确定给定对象是否标记为[Serializble]属性(通过反射?我猜)。另外,IFormatter.Serializble()方法仅采用任何Object。这实际上意味着.NET中的每个对象都可以序列化?如果没有,如果传递了不可序列化对象,是否可以仅采用可序列化对象并造成编译时错误?

否,除了编写适用您想要的确切规则的自定义Roslyn分析仪外,所有类型都无法执行此操作,并添加了您的警告。想。这是很多工作,并且简单地添加涵盖您打算支持的序列化方案的单元测试/集成测试可能会更简单。

其他注释:

  • [Serializable]是伪属性 - 它实际上映射到IL标志,而不是常规属性注释,另外仅由某些序列化器(不是全部)使用的
  • 使用ISerializable/IFormatter API的连续化器通常是您要用于大多数通用场景的 last 序列化器 - 它们通常更脆,更脆弱,并且是其他更宽容的序列化器(Json,XML,Protobuf等)

这实际上意味着.NET中的每个对象都可以序列化?

否。但是,不同的序列化对可以序列化时有不同的规则,并且这些规则通常是多元化和多样化的……即,它看起来像x ,例如y 喜欢z。因此,接受所有3个的API是: object

相关内容

  • 没有找到相关文章

最新更新