【问题标题】:How to apply Serializable attribute globally?如何全局应用 Serializable 属性?
【发布时间】:2019-02-21 00:42:41
【问题描述】:

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

【问题讨论】:

  • 为什么?通常,对于可序列化的类而言,此属性不是强制性的。它是某些机制的标记,例如远程处理、二进制格式化程序或肥皂格式化程序。它与一般的 XML 或 JSON 序列化没有任何关系
  • @ZorgoZ 谢谢,因为在 sql server 模式下使用 session,我必须这样做

标签: c# attributes serializable


【解决方案1】:

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

但是:在全局范围内应用它是一个非常非常的坏主意。准确了解您要序列化的内容、时间以及原因非常重要 - 无论是用于会话状态、主要持久性、缓存还是任何其他用例。像

这样的语句

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多