Import und Export von Schemas

Windows Communication Foundation (WCF)enthält ein neues Serialisierungsmodul, das 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 die Serialisierung erstellt oder die das Deserialisierungsprogramm zugreifen kann. WCF verwendet die vom World Wide Web Consortium (W3C) definierte Sprache XML Schema Definition (XSD) zur Schemadarstellung. Diese Sprache ist mit zahlreichen Plattformen von Drittanbietern weitgehend interoperabel.

Die schemaimportkomponente XsdDataContractImporter, anhand eines XSD-Schemadokuments und generiert .NET Framework -Klassen (normalerweise datenvertragsklassen), dass die serialisierten Formen dem angegebenen Schema entsprechen.

Das folgende Schemafragment:

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

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

[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 

Beachten Sie, dass der generierte Typ mehreren empfohlenen Vorgehensweisen für Datenverträge folgt (finden Sie in Best Practices: Datenvertragsversionsverwaltung):

  • Der Typ implementiert die IExtensibleDataObject Schnittstelle. Weitere Informationen finden Sie unterAufwä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.

Die XsdDataContractExporter ermöglicht es Ihnen, den umgekehrten Vorgang – anhand von Typen, die serialisierbar sind mit den DataContractSerializer und generieren Sie ein XSD-Schema-Dokument.

Keine Garantie für die Originaltreue

Bei einem Roundtrip wird keine Garantie für die Originaltreue von Schemas oder Typen übernommen. (Ein Roundtrip import ein Schemas zum Erstellen einer Reihe von Klassen und 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.

Weitere Informationen finden Sie unterDatenvertrags-Schemareferenz. Wenn ein Schema den Datenvertragsregeln nicht entspricht, verwenden Sie ein anderes Serialisierungsmodul. Zum Beispiel die XmlSerializer einen eigenen separaten schemaimportmechanismus. Außerdem gibt es einen speziellen Importmodus, der die Bandbreite unterstützter Schemata erweitert. Weitere Informationen finden Sie unterim 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 unterVom Datenvertragsserialisierer unterstützte Typen. Beachten Sie dieses Schema generiert, mit der XsdDataContractExporter normalerweise gültige Daten, die XsdDataContractImporter können (es sei denn, die XmlSchemaProviderAttribute wird verwendet, um das Schema anpassen).

Weitere Informationen finden Sie unterMithilfe der XsdDataContractImporter, finden Sie unter Importieren von Schemas zum Generieren von Klassen.

Weitere Informationen finden Sie unterMithilfe der XsdDataContractExporter, finden Sie unter Exportieren von Schemas aus Klassen.

Siehe auch

DataContractSerializer
XsdDataContractImporter
XsdDataContractExporter
Importieren von Schemas zum Generieren von Klassen
Exportieren von Schemas aus Klassen