不标记类的影响<serializable()> </serializable()>

时间:2010-11-22 22:10:22

标签: .net serialization

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

3 个答案:

答案 0 :(得分:2)

我假设当你说“你仍然可以序列化一个对象而不标记它可序列化”时,你的意思是你自己在进行序列化/反序列化。

添加 [Serializable] 属性指示第三方代码可以序列化对象。当您想要在ASP.NET会话或其他工具(如Memcached缓存)中存储对象时,这尤其有用。

答案 1 :(得分:1)

[Serializable]放在Type上允许您将它与[System.Runtime.Serialization][1] API一起使用,这对于最常见的场景非常方便,并且可以避免编写大量重复代码来序列化/反序列化对象,通常很容易测试和容易出错。并且它们在底层存储机制方面也获得了一些灵活性(例如二进制,XML,SOAP ......)。

如果您将[Serializable]放在其中一个类型上,则应确保使用标准机制正确序列化/反序列化,或者您需要实现ISerializble来自行控制该过程。你应该避免序列化的事情是事件处理程序属性。

最值得注意的是,在决定是否使用Serializable时,您可以获得完整对象图的自由序列化(根对象及其所有关联及其关联),否则这将非常复杂,尤其是涉及继承时。但为了实现这一目标,它要求您将所有类型都标记为Serializable

答案 2 :(得分:0)

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