如何全局应用Serializable属性?

时间:2018-09-17 06:23:16

标签: c# attributes serializable

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

1 个答案:

答案 0 :(得分:2)

否,没有一种全局应用此方法的方法-您必须访问每种类型并添加属性。

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

这样的语句
  

我必须对所有课程都应用[Serializable()]属性

告诉我您目前不是可以控制您所存储的内容。

另外,由于[Serializable](通常)映射到BinaryFormatter,因此了解使用很多方式非常重要(使用BinaryFormatter时)在这种情况下,可能会将模型的意外部分拖到序列化数据中。其中最臭名昭著的是“事件”,但是:还有其他事件。

当我看到这种类型的问题时,我设想的是,您正在将主数据模型中的类型用作进入会话状态的对象,但是坦率地说:这是一个错误-并引发类似这样的问题。相反,更可操作的方法是创建一个为此目的纯存在的单独模型

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