共用方式為


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

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

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

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

  • 若要在部分信任程式碼中,透過 DataContractSerializer 序列化或還原序列化可實作 ISerializable 的型別需要 SerializationFormatterUnmanagedCode 權限。
  • 部分信任模式中執行 WCF 程式碼時,將不支援 readonly 欄位的序列化與還原序列化 (publicprivate 兩者)。這是因為產生的 IL 無法加以驗證,因此需要較高的權限。
  • 部分信任環境同時支援 DataContractSerializerXmlSerializer。然而,DataContractSerializer 的使用需視下列情況而定:
    • 所有可序列化的 [DataContract] 型別必須是公用的。
    • [DataContract] 型別中所有可序列化的 [DataMember] 欄位或屬性必須具有公用和讀/寫性質。在部分信任應用程式中執行 WCF 時,不支援 readonly 欄位的序列化與還原序列化。
    • 部分信任環境不支援 [Serializable]/ISerializable] 程式設計模型。
    • 已知型別必須在程式碼或電腦層級組態 (Machine.config) 中指定。為了安全起見,已知型別無法在應用程式層級的組態中指定。
  • 在部分信任環境中,可實作 IObjectReference 的型別會擲回例外狀況,因為 GetRealObject 方法需要安全性權限 [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)]

其他序列化注意事項

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

  • 資料合約序列化程式完全支援泛型型別。
  • 資料合約序列化程式完全支援可為 Null 的型別 (Nullable Type)。
  • 介面型別會被視為 Object 或是集合型別 (在集合介面的案例中)。
  • 同時支援結構與類別。
  • DataContractSerializer 不支援 XmlSerializer 和 ASP.NET Web 服務所使用的程式設計模型。特別是,它不支援 XmlElementAttributeXmlAttributeAttribute 之類的屬性。若要啟用對此程式設計模型的支援,WCF 必須切換為使用 XmlSerializer,而不是 DataContractSerializer
  • DBNull 型別會被特別處理。它是一種單一型別,且在還原序列化時,還原序列化程式會尊重單一限制並將所有 DBNull 參考指向單一執行個體。由於 DBNull 是一種可序列化型別,它需要 SerializationFormatter 權限。

請參閱

概念

資料合約中的 XML 與 ADO.NET 型別
使用資料合約
可序列化的型別
資料合約中的集合型別
資料合約中的列舉型別