【问题标题】:Impact of not marking a class <Serializable()>不标记类的影响 <Serializable()>
【发布时间】:2011-05-14 03:14:00
【问题描述】:

您可以使用SerializableAttribute 将类标记为可序列化。但是,您仍然可以序列化对象而不将其标记为可序列化。这样做有什么影响?

【问题讨论】:

标签: .net serialization


【解决方案1】:

我假设当您说“您仍然可以序列化对象而不将其标记为可序列化”时,您的意思是您正在自己进行序列化/反序列化。

添加 [Serializable] 属性向 3rd 方代码表明对象可以被序列化。当您希望将对象存储在 ASP.NET 会话或其他工具(如 Memcached 缓存)中时,这尤其有用。

【讨论】:

    【解决方案2】:

    [Serializable] 放在一个类型上允许您将它与[System.Runtime.Serialization][1] API 一起使用,这对于最常见的场景非常方便,并且您无需编写大量重复的代码来序列化/反序列化您的对象,即通常测试繁琐且容易出错。它们还为您在底层存储机制(例如二进制、XML、SOAP...)方面提供了一些灵活性。

    如果您将[Serializable] 放在您的一种类型上,您应该确保它会使用标准机制正确序列化/反序列化,或者您需要实现ISerializble 以自己控制流程。您应该避免序列化的事情是例如事件处理程序属性。

    最值得注意的是,在决定是否使用 Serializable 时,您可以获得完整对象图(根对象加上其所有关联及其关联)的免费序列化,否则这将非常复杂,尤其是在涉及继承的情况下.但要使其工作,它要求您在图表中将所有类型标记为Serializable

    【讨论】:

      【解决方案3】:

      据我了解,您可以使用代理来序列化不可序列化的对象,但是什么会促使您这样做呢?我认为私人成员不会使用这种方法进行序列化。您可能需要一个默认构造函数等。

      【讨论】:

        猜你喜欢
        • 2021-10-28
        • 2018-06-21
        • 2011-11-16
        • 1970-01-01
        • 2010-11-27
        • 1970-01-01
        • 1970-01-01
        • 2020-06-13
        • 2011-01-08
        相关资源
        最近更新 更多