gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:59:15 25 4
gpt4 key购买 nike

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

最佳答案

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

但是:在全局范围内应用它是一个非常、非常的坏主意。准确了解您要序列化的内容、时间和原因非常重要 - 无论这是针对 session 状态、主要持久性、缓存还是任何其他用例。语句如

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

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

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

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

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

关于c# - 如何在全局范围内应用 Serializable 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52361834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com