資料合約序列化程式支援的型別

Windows Communication Foundation (WCF) 使用 DataContractSerializer 做為預設的序列化引擎,以將資料轉換為 XML 並將 XML 轉換回資料。 DataContractSerializer 主要是用來序列化「 資料合約 」(Data Contract) 型別。 但是,它支援其他許多型別,而您可將這些視為擁有隱含資料合約。 下列是可以序列化的完整型別清單:

在部分信任模式中使用特定型別的限制

下列是在部分信任模式案例中使用特定型別的限制清單:

  • 若要在部分信任程式碼中,透過 ISerializable 序列化或還原序列化可實作 DataContractSerializer 的型別需要 SerializationFormatterUnmanagedCode 權限。

  • 部分信任模式中執行 WCF 程式碼時,不支援 readonly 欄位 (publicprivate) 的序列化與還原序列化。 這是因為產生的 IL 無法加以驗證,因此需要較高的權限。

  • 部分信任環境同時支援 DataContractSerializerXmlSerializer 。 然而, DataContractSerializer 的使用需視下列情況而定:

    • 所有可序列化的 [DataContract] 型別必須是公用的。

    • [DataMember] 型別中所有可序列化的 [DataContract] 欄位或屬性必須具有公用和讀/寫性質。 在部分信任應用程式中執行 WCF 時,不支援 readonly 欄位的序列化與還原序列化。

    • 支援 [Serializable]/ISerializable] 程式設計模型。

    • 已知型別必須在程式碼或電腦層級組態 (Machine.config) 中指定。 為了安全起見,已知型別無法在應用程式層級的組態中指定。

  • 在部分信任環境中,可實作 IObjectReference 的型別會擲回例外狀況,因為 GetRealObject 方法需要安全性權限 [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)]

其他序列化注意事項

下列規則也適用於「資料合約序列化程式」支援的型別:

  • 資料合約序列化程式完全支援泛型型別。

  • 資料合約序列化程式完全支援可為 Null 的型別。

  • 介面型別會被視為 Object 或是集合型別 (在集合介面的案例中)。

  • 同時支援結構與類別。

  • DataContractSerializer 不支援 XmlSerializer 和 ASP.NET Web 服務所使用的程式設計模型。 特別是,它不支援 XmlElementAttributeXmlAttributeAttribute之類的屬性。 若要啟用對此程式設計模型的支援,WCF 必須切換為使用 XmlSerializer,而非 DataContractSerializer

  • DBNull 型別會被特別處理。 它是一種單一型別,且在還原序列化時,還原序列化程式會尊重單一限制並將所有 DBNull 參考指向單一執行個體。 由於 DBNull 是一種可序列化型別,它需要 SerializationFormatter 權限。

另請參閱