如何在全局范围内应用 Serializable 属性?

How to apply Serializable attribute globally?

我必须为所有 类 应用 [Serializable()] 属性,但我想知道有什么方法可以使 类 全局可序列化,而不是为所有 [单独应用此属性=12=]?

不,没有办法在全球范围内应用它 - 您必须访问每种类型并添加属性。

但是:在全球范围内应用它是一个非常非常的坏主意。确切地知道您要序列化的内容、时间和原因 非常重要 - 无论这是针对会话状态、主要持久性、缓存还是任何其他用例。像

这样的语句

I have to apply [Serializable()] attribute for all classes

告诉我您目前无法控制您存储的内容。

此外,由于 [Serializable](通常)映射到 BinaryFormatter,重要的是要知道有 很多 种方式(当使用 BinaryFormatter) 其中可能会不小心将模型的意外部分拖到序列化数据中。其中最臭名昭著的是"events",但是:还有其他的

当我看到这类问题时,我的设想是您正在使用主数据模型中的类型作为您要放入会话状态的东西,但坦率地说:这是一个错误 - 并导致这样的问题。相反,更易于管理的方法是创建一个单独的模型 纯粹为了这个目的:

  • 只有有你需要在会​​话中可用的数据
  • 它被标记为 [Serializable] 如果您的提供者需要它 - 或者需要任何其他元数据 它存在的唯一目的
  • 没有有任何事件
  • 它不涉及任何工具,如 ORM 上下文、数据库连接等
  • 理想情况下它是不可变的(以避免混淆如果您在本地进行更改会发生什么,否则有时内存中和持久存储的行为会有所不同)
  • 只是简单的基本对象 - 很容易推理
  • 可以单独迭代到你的主要领域对象,所以你不会有任何意外的中断,因为你在你的领域模型中改变了一些看似无辜的东西并且它破坏了序列化程序