共用方式為


數據合約串行化程式支援的類型

Windows Communication Foundation (WCF) 會使用 DataContractSerializer 作為其預設串行化引擎,將數據轉換成 XML,並將 XML 轉換回數據。 DataContractSerializer是設計來串行化數據合約型別。 不過,它支援許多其他類型,可視為具有隱含數據合約。 以下是可串行化之型別的完整清單:

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

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

  • 若要使用 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不支援和 ASP.NET Web 服務所使用的XmlSerializer程式設計模型。 特別是,它不支援如XmlElementAttributeXmlAttributeAttribute等屬性。 若要開啟此程式設計模型的支援,WCF 必須切換為使用 XmlSerializer ,而不是 DataContractSerializer

  • DBNull 類型會以特殊方式處理。 它是單例類型,在反序列化時,反序列化器會遵循單例約束,並將所有 DBNull 參照指向單例實例。 因為 DBNull 是可串行化的型別,所以需要 SerializationFormatter 許可權。

另請參閱