2010-11-22 38 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的所有類型。

相關問題