2010-11-22 40 views
3

您可以使用SerializableAttribute将类标记为可序列化。但是,您仍然可以序列化一个对象而不标记它是可序列化的。这样做的影响是什么?不标记类的影响<Serializable()>

+1

概括起来相当不错...... HTTP://stackoverflow.com/questions/2595104/why-do-you-have-to-mark-a-class-with-the-attribute-serializable – 2010-11-22 22:15:26

回答

0

据我所知,您可以使用代理来序列化一个不可序列化的对象,但是会提示您这么做?我不认为私人会员会使用这种方法进行连载。你可能需要一个默认的构造等

2

我假设当你说“你仍然可以将对象序列无标记可序列化”你的意思是你正在做的串行化/反序列化自己。

添加[可序列化]属性向第三方代码表明该对象可以被序列化。当您想要将对象存储在ASP.NET会话中或其他工具(如Memcached缓存)中时,此功能特别有用。

1

在Type把[Serializable]允许您与[System.Runtime.Serialization][1] API的,这是最常见的情况非常方便和饶你从编写大量重复的代码序列化/反序列化你的对象,通常是使用繁琐它测试和容易出错。而且它们在底层存储机制方面也有一定的灵活性(如Binary,XML,SOAP ...)。

如果您将[Serializable]放在您的某个类型上,则应确保它将使用标准机制正确地序列化/反序列化,或者您需要实施ISerializble来自己控制过程。你应该避免序列化的东西是事件处理器属性。

最值得注意的是,在决定是否使用Serializable时,您可以获得完整对象图(根对象及其所有关联和它们的关联)的自由序列化,否则这将非常复杂,特别是如果继承是参与其中。但为了达到这个目的,它需要你在图中标记为Serializable的所有类型。

相关问题