共用方式為


範本匯入和匯出

Windows Communication Foundation (WCF) 包含新的串行化引擎,DataContractSerializer。 程式會在 DataContractSerializer .NET Framework 物件與 XML 之間進行雙向轉換。 除了串行化程式本身之外,WCF 還包含相關聯的架構匯入和架構匯出機制。 模式 是串行器所產生的 XML 結構的正式、精確且機器可讀取的描述,或還原器可以存取的 XML 結構。 WCF 使用萬維網聯合會 (W3C) XML 架構定義語言 (XSD) 作為其架構表示法,這與許多第三方平臺廣泛互通。

架構匯入元件 XsdDataContractImporter會採用 XSD 架構檔,併產生 .NET Framework 類別(通常是數據合約類別),讓串行化表單對應至指定的架構。

例如,下列架構片段:

XsdDataContractImporter importer = new XsdDataContractImporter();
importer.Options.Namespaces.Add(new KeyValuePair<string, string>("http://schemas.contoso.com/carSchema", "Contoso.Cars"));
Dim importer As New XsdDataContractImporter
importer.Options.Namespaces.Add(New KeyValuePair(Of String, String)("http://schemas.contoso.com/carSchema", "Contoso.Cars"))

會產生下列類型(稍微簡化以提升可讀性)。

[DataContract]
public partial class Vehicle : IExtensibleDataObject
{
    private int yearField;
    private string colorField;

    [DataMember]
    public int year
    {
        get { return this.yearField; }
        set { this.yearField = value; }
    }
    [DataMember]
    public string color
    {
        get { return this.colorField; }
        set { this.colorField = value; }
    }

    private ExtensionDataObject extensionDataField;
    public ExtensionDataObject ExtensionData
    {
        get { return this.extensionDataField; }
        set { this.extensionDataField = value; }
    }
}
Partial Class Vehicle
    Implements IExtensibleDataObject

    Private yearField As Integer
    Private colorField As String

    <DataMember()> _
    Public Property year() As Integer
        Get
            Return Me.yearField
        End Get
        Set
            Me.yearField = value
        End Set
    End Property

    <DataMember()> _
    Public Property color() As String
        Get
            Return Me.colorField
        End Get
        Set
            Me.colorField = value
        End Set
    End Property
    Private extensionDataField As ExtensionDataObject

    Public Property ExtensionData() As ExtensionDataObject _
        Implements IExtensibleDataObject.ExtensionData
        Get
            Return Me.extensionDataField
        End Get
        Set(ByVal value As ExtensionDataObject)
            Me.extensionDataField = value
        End Set
    End Property
End Class

請注意,產生的類型遵循數個數據合約最佳做法(在 最佳做法:數據合約版本控制中找到):

  • 型別會實作 IExtensibleDataObject 介面。 如需詳細資訊,請參閱 Forward-Compatible 數據合約

  • 資料成員被實作為包覆私有欄位的公用屬性。

  • 類別是部分類別,而且不需要修改產生的程式代碼即可進行新增。

XsdDataContractExporter可讓您進行反向作業—採用可使用 DataContractSerializer 串行化的型別,併產生 XSD 架構檔。

不保證可靠性

不保證架構或類型會以完全逼真度進行來回行程。 ( 來回 表示匯入架構以建立一組類別,並匯出結果以再次建立架構。可能不會傳回相同的架構。 反向過程也不保證能保有準確性。 (匯出類型以產生其架構,然後將類型匯回。它不太可能傳回相同的類型。

支援的類型

數據合約模型僅支援 WC3 架構的有限子集。 任何不符合此子集的架構,都會在匯入程式期間造成例外狀況。 例如,無法指定資料合約的數據成員應該序列化為 XML 屬性。 因此,不支援需要使用 XML 屬性的架構,而且會導致匯入期間發生例外狀況,因為無法產生具有正確 XML 投影的數據合約。

例如,無法使用預設匯入設定匯入下列架構片段。

<xs:complexType name="Vehicle">
  <xs:sequence>
    <xs:element name="year" type="xs:int" />
    <xs:element name="color" type="xs:string" />
  </xs:sequence>
  <xs:attribute name="engineHorsePower" type="xs:int" />
</xs:complexType>

如需詳細資訊,請參閱 數據合約架構參考。 如果架構不符合數據合約規則,請使用不同的串行化引擎。 例如,XmlSerializer 會使用自己的獨立架構匯入機制。 此外,還有一種特殊的匯入模式,其中支援架構的範圍會展開。 如需詳細資訊,請參閱將IXmlSerializable中的產生型別一節。

XsdDataContractExporter 支援所有可以被 DataContractSerializer 序列化的 .NET Framework 型別。 如需詳細資訊,請參閱 數據合約串行化程式支援的類型。 請注意,使用 XsdDataContractExporter 產生的架構通常是有效的數據, XsdDataContractImporter 可以使用 (除非 XmlSchemaProviderAttribute 是用來自定義架構的 )。

如需使用 XsdDataContractImporter的詳細資訊,請參閱 匯入架構以產生類別

如需使用 XsdDataContractExporter的詳細資訊,請參閱 從類別導出架構

另請參閱