【发布时间】:2011-05-14 03:14:00
【问题描述】:
您可以使用SerializableAttribute 将类标记为可序列化。但是,您仍然可以序列化对象而不将其标记为可序列化。这样做有什么影响?
【问题讨论】:
标签: .net serialization
您可以使用SerializableAttribute 将类标记为可序列化。但是,您仍然可以序列化对象而不将其标记为可序列化。这样做有什么影响?
【问题讨论】:
标签: .net serialization
我假设当您说“您仍然可以序列化对象而不将其标记为可序列化”时,您的意思是您正在自己进行序列化/反序列化。
添加 [Serializable] 属性向 3rd 方代码表明对象可以被序列化。当您希望将对象存储在 ASP.NET 会话或其他工具(如 Memcached 缓存)中时,这尤其有用。
【讨论】:
将[Serializable] 放在一个类型上允许您将它与[System.Runtime.Serialization][1] API 一起使用,这对于最常见的场景非常方便,并且您无需编写大量重复的代码来序列化/反序列化您的对象,即通常测试繁琐且容易出错。它们还为您在底层存储机制(例如二进制、XML、SOAP...)方面提供了一些灵活性。
如果您将[Serializable] 放在您的一种类型上,您应该确保它会使用标准机制正确序列化/反序列化,或者您需要实现ISerializble 以自己控制流程。您应该避免序列化的事情是例如事件处理程序属性。
最值得注意的是,在决定是否使用 Serializable 时,您可以获得完整对象图(根对象加上其所有关联及其关联)的免费序列化,否则这将非常复杂,尤其是在涉及继承的情况下.但要使其工作,它要求您在图表中将所有类型标记为Serializable。
【讨论】:
据我了解,您可以使用代理来序列化不可序列化的对象,但是什么会促使您这样做呢?我认为私人成员不会使用这种方法进行序列化。您可能需要一个默认构造函数等。
【讨论】: