Import a export schémat

Windows Communication Foundation (WCF) obsahuje nový serializační modul , the DataContractSerializer. Překládá DataContractSerializer se mezi objekty rozhraní .NET Framework a XML (v obou směrech). Kromě samotného serializátoru wcf zahrnuje přidružené mechanismy importu schématu a exportu schématu. Schéma je formální, přesný a strojově čitelný popis tvaru XML, který serializátor vytvoří nebo že deserializátor má přístup. WCF jako reprezentaci schématu používá jazyk XSD (World Wide Web Consortium) XML (W3C), který je široce interoperabilní s mnoha platformami třetích stran.

Součást importu schématu přebírá XsdDataContractImporterdokument schématu XSD a generuje třídy rozhraní .NET Framework (obvykle třídy kontraktů dat), aby serializované formuláře odpovídaly danému schématu.

Například následující fragment schématu:

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"))

vygeneruje následující typ (zjednodušeně pro lepší čitelnost).

[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

Všimněte si, že vygenerovaný typ se řídí několika osvědčenými postupy pro kontrakty dat (které najdete v části Osvědčené postupy: Správa verzí kontraktů dat):

  • Typ implementuje IExtensibleDataObject rozhraní. Další informace najdete v tématu Kontrakty dat kompatibilní s předáváním.

  • Datové členy jsou implementovány jako veřejné vlastnosti, které zabalují privátní pole.

  • Třída je částečná třída a sčítání lze provést bez úpravy vygenerovaného kódu.

Umožňuje XsdDataContractExporter provést opak – vzít typy, které jsou serializovatelné s DataContractSerializer dokumentem schématu XSD a vygenerovat.

Věrnost není zaručená

Není zaručeno, že schéma nebo typy tvoří kruhovou cestu s celkovou věrností. (Doba odezvy znamená import schématu pro vytvoření sady tříd a export výsledku a vytvoření schématu znovu.) Stejné schéma nemusí být vráceno. Vrácení procesu zpět také není zaručeno zachování věrnosti. (Exportujte typ, aby se vygenerovalo jeho schéma, a potom typ naimportujte zpět. Je nepravděpodobné, že se vrátí stejný typ.)

Podporované typy

Model kontraktu dat podporuje pouze omezenou podmnožinu schématu WC3. Jakékoli schéma, které nevyhovuje této podmnožině, způsobí výjimku během procesu importu. Například neexistuje způsob, jak určit, že datový člen datového kontraktu by měl být serializován jako atribut XML. Schémata, která vyžadují použití atributů XML, nejsou podporována a způsobí výjimky během importu, protože není možné vygenerovat kontrakt dat se správnou projekcí XML.

Následující fragment schématu se například nedá importovat pomocí výchozího nastavení importu.

<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>

Další informace naleznete v tématu Referenční informace ke schématu kontraktu dat. Pokud schéma nevyhovuje pravidlům kontraktů dat, použijte jiný modul serializace. Například XmlSerializer používá vlastní samostatný mechanismus importu schématu. Existuje také speciální režim importu, ve kterém je rozšířen rozsah podporovaných schémat. Další informace najdete v části o generování IXmlSerializable typů v importu schématu pro generování tříd.

Podporuje XsdDataContractExporter všechny typy rozhraní .NET Framework, které lze serializovat pomocí DataContractSerializerrozhraní . Další informace naleznete v tématu Typy podporované serializátorem kontraktu dat. Všimněte si, že schéma vygenerované pomocí XsdDataContractExporter běžně platných dat, která XsdDataContractImporter lze použít (pokud XmlSchemaProviderAttribute se nepoužívá k přizpůsobení schématu).

Další informace o použití XsdDataContractImporternaleznete v tématu Import schématu pro generování tříd.

Další informace o použití XsdDataContractExporternaleznete v tématu Export schémat z tříd.

Viz také