共用方式為


序列化方針

您在設計新類別時應將序列化納入考量,因為無法讓已編譯的類別變成可序列化。要問的一些問題有:此類別會在應用程式定義域間傳送嗎?此類別會以遠端使用嗎?使用者將如何處理此類別,他們會從我需要序列化的類別衍生出新類別嗎?在不確定時,請將類別標示為可序列化。除非以下任何一項屬實,否則可能最好將所有類別標示為可序列化:

  • 類別永不會跨應用程式定義域。若不需序列化,且類別需要跨應用程式定義域,請從 MarshalByRefObject 衍生類別。

  • 類別會儲存只適用於此類別目前的執行個體的特殊指標。例如,若類別包含 Unmanaged 記憶體或檔案控制代碼,請確定這些檔案以 NonSerializedAttribute 屬性標示,否則絕對不要序列化該類別。

  • 包含機密資訊的類別資料成員。在此例中,建議將類別標示為可序列化,但將包含機密資訊的個別資料成員以 NonSerializedAttribute 屬性標示。或是實作 ISerializable 介面,且只序列化必要欄位。

將類別標示為可序列化時,小心其安全性含意。類別或類別建構函式上 CodeAccessPermissionInheritance DemandLink Demand,可依預設或自訂序列化略過。此自訂序列化會對相同的 CodeAccessPermission 實作對應要求。(如需詳細資訊,請參閱 SecurityAction 列舉型別)。若類別有 Link Demand 權限,則執行階段只會檢查立即呼叫端,以驗證呼叫端已獲得授與權限。.NET Framework 類別庫程式碼是以 Microsoft 強式名稱簽章,並且總是授與完全的信任。所有程式碼都可以使用授與完全信任的程式碼,以略過連結時的安全性檢查。例如,在序列化的情況下,沒有必要序列化權限的惡意程式碼,可呼叫其中一個完成信任的 .NET Framework 格式子 (例如 BinaryFormatter),且略過連結要求的權限檢查。

另請參閱

其他資源

二進位序列化
Remote Objects
XML 和 SOAP 序列化
Security and Serialization