如何全局应用Serializable属性?

问题描述 投票:2回答:1

我必须为所有类应用[Serializable()]属性,但我想知道有没有办法让全局类Serializable而不是为所有类单独应用这个属性?

c# attributes serializable
1个回答
2
投票

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

然而:在全球范围内应用这个是一个非常非常糟糕的主意。准确地知道您要序列化什么,何时以及为什么非常重要 - 无论是针对会话状态,主持久性,缓存还是任何其他用例。声明如

我必须为所有类应用[Serializable()]属性

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

此外,由于[Serializable](通常)映射到BinaryFormatter,重要的是要知道有很多方法(当使用BinaryFormatter时)可能会意外地将模型的意外部分拖到序列化数据中。其中最臭名昭着的是“事件”,但是:还有其他事件。

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

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