Import und Export von Schemas

Windows Communication Foundation (WCF) umfasst ein neues Serialisierungsmodul, DataContractSerializer. DataContractSerializer übersetzt zwischen .NET Framework-Objekten und XML (in beide Richtungen). Zusätzlich zum Serialisierungsprogramm umfasst WCF zugeordnete Mechanismen zum Schemaimport und -export. Schema ist eine formale, genaue und maschinenlesbare Beschreibung der XML-Form, die das Serialisierungsprogramm erstellt oder auf die das Programm zugreifen kann. WCF verwendet die vom World Wide Web Consortium (W3C) definierte Sprache XML Schema Definition (XSD) als Schemadarstellung. Diese Sprache ist mit zahlreichen Plattformen von Drittanbietern weitgehend interoperierbar.

Die Schemaimportkomponente XsdDataContractImporter generiert anhand eines XSD-Schemadokuments .NET Framework-Klassen (normalerweise Datenvertragsklassen), sodass die serialisierten Formen dem angegebenen Schema entsprechen.

Das folgende Schemafragment:

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

generiert beispielsweise den folgenden Typ (zugunsten einer besseren Lesbarkeit leicht vereinfacht).

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 
[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;}
    }
}

Beachten Sie, dass der generierte Typ mehreren empfohlenen Vorgehensweisen für Datenverträge (siehe Empfohlene Vorgehensweisen: Versionsverwaltung von Datenverträgen) folgt:

  • Der Typ implementiert die IExtensibleDataObject-Schnittstelle. Weitere Informationen finden Sie unter Aufwärtskompatible Datenverträge.

  • Datenmember werden als öffentliche Eigenschaften implementiert, die private Felder umschließen.

  • Die Klasse ist eine partielle Klasse, und Hinzufügungen können vorgenommen werden, ohne generierten Code zu ändern.

Mit XsdDataContractExporter können Sie umgekehrt verfahren und anhand von Typen, die mit DataContractSerializer serialisierbar sind, ein XSD-Schemadokument generieren.

Keine Garantie für die Originaltreue

Bei einem Roundtrip wird keine Garantie für die Originaltreue von Schemas oder Typen übernommen. (Mit Roundtrip wird der Import eines Schemas zum Erstellen einer Gruppe von Klassen und der Export des Ergebnisses zum Erstellen eines Schemas bezeichnet.) Das gleiche Schema wird möglicherweise nicht zurückgegeben. Auch bei der Umkehrung des Prozesses ist eine Beibehaltung der Originaltreue nicht garantiert. (Exportieren Sie einen Typ, um sein Schema zu generieren, und importieren Sie den Typ dann wieder zurück. Es ist unwahrscheinlich, dass der gleiche Typ zurückgegeben wird.)

Unterstützte Typen

Das Datenvertragsmodell unterstützt nur eine beschränkte Teilmenge des WC3-Schemas. Jedes Schema, das dieser Teilmenge nicht entspricht, verursacht während des Importprozesses eine Ausnahme. Es gibt beispielsweise keine Möglichkeit festzulegen, dass ein Datenmember eines Datenvertrags als XML-Attribut serialisiert werden soll. Schemas, die XML-Attribute erfordern, werden daher nicht unterstützt und verursachen beim Import Ausnahmen, da es nicht möglich ist, einen Datenvertrag mit der richtigen XML-Projektion zu generieren.

Das folgende Schemafragment kann z. B. nicht mit den Standardimporteinstellungen importiert werden.

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

Weitere Informationen finden Sie unter Datenvertrags-Schemareferenz. Wenn ein Schema den Datenvertragsregeln nicht entspricht, verwenden Sie ein anderes Serialisierungsmodul. XmlSerializer verwendet z. B. einen eigenen separaten Schemaimportmechanismus. Außerdem gibt es einen speziellen Importmodus, bei dem der Bereich der unterstützten Schemas erweitert wird. Weitere Informationen finden Sie unter dem Abschnitt zum Generieren von IXmlSerializable-Typen in Importieren von Schemas zum Generieren von Klassen.

XsdDataContractExporter unterstützt alle .NET Framework-Typen, die mit DataContractSerializer serialisiert werden können. Weitere Informationen finden Sie unter Vom Datenvertragsserialisierer unterstützte Typen. Beachten Sie, dass mit XsdDataContractExporter generierte Schemas normalerweise gültige Daten sind, die von XsdDataContractImporter verwendet werden können (sofern XmlSchemaProviderAttribute nicht zur Anpassung des Schemas verwendet wird).

Weitere Informationen über zur Verwendung von XsdDataContractImporter finden Sie unter Importieren von Schemas zum Generieren von Klassen.

Weitere Informationen über zur Verwendung von XsdDataContractExporter finden Sie unter Exportieren von Schemas aus Klassen.

Siehe auch

Verweis

DataContractSerializer
XsdDataContractImporter
XsdDataContractExporter

Konzepte

Importieren von Schemas zum Generieren von Klassen
Exportieren von Schemas aus Klassen