Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Windows Communication Foundation (WCF) enthält ein neues Serialisierungsmodul, das DataContractSerializer. Die DataContractSerializer
Übersetzung erfolgt zwischen .NET Framework-Objekten und XML (in beide Richtungen). Zusätzlich zum Serialisierer selbst umfasst WCF die zugehörigen Schemaimport- und Schemaexportmechanismen.
Das Schema ist eine formale, präzise und maschinenlesbare Beschreibung der XML-Form, die der Serialisierer erzeugt oder auf den der Deserialisierer zugreifen kann. WCF verwendet die XML-Schemadefinitionssprache World Wide Web Consortium (W3C) als Schemadarstellung, die weit mit zahlreichen Drittanbieterplattformen interoperabel ist.
Die Schemaimportkomponente verwendet XsdDataContractImporterein XSD-Schemadokument und generiert .NET Framework-Klassen (normalerweise Datenvertragsklassen), sodass die serialisierten Formulare dem angegebenen Schema entsprechen.
Beispiel: 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 den folgenden Typ (leicht vereinfacht für eine bessere Lesbarkeit).
[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 bewährten Methoden des Datenvertrags folgt (in bewährten Methoden: Datenvertragsversionsverwaltung):
Der Typ implementiert die IExtensibleDataObject Schnittstelle. Weitere Informationen finden Sie unter Forward-Compatible Datenverträge.
Datenmitglieder werden als öffentliche Eigenschaften implementiert, die private Felder verpacken.
Die Klasse ist eine partielle Klasse, und Ergänzungen können vorgenommen werden, ohne generierten Code zu ändern.
Das XsdDataContractExporter ermöglicht es Ihnen, das Gegenteil zu tun—Typen, die mit dem DataContractSerializer
serialisierbar sind, zu nehmen und ein XSD-Schema-Dokument zu erstellen.
Treue ist nicht garantiert
Bei einem Roundtrip wird keine Garantie für die Originaltreue von Schemas oder Typen übernommen. (Ein Roundtrip bedeutet, ein Schema zu importieren, um eine Reihe von Klassen zu erstellen, und das Ergebnis exportieren, um ein Schema erneut zu erstellen.) Dasselbe Schema wird möglicherweise nicht zurückgegeben. Das Umkehren des Prozesses garantiert auch nicht, die Originaltreue zu bewahren. (Exportieren Sie einen Typ, um sein Schema zu generieren, und importieren Sie dann den Typ zurück. Es ist unwahrscheinlich, dass derselbe Typ zurückgegeben wird.)
Unterstützte Typen
Das Datenvertragsmodell unterstützt nur eine begrenzte Teilmenge des WC3-Schemas. Jedes Schema, das dieser Teilmenge nicht entspricht, führt während des Importvorgangs zu einer Ausnahme. Es gibt z. B. keine Möglichkeit, anzugeben, dass ein Datenmitglied eines Datenvertrags als XML-Attribut serialisiert werden soll. Daher werden Schemas, die die Verwendung von XML-Attributen erfordern, nicht unterstützt und führen während des Imports zu Ausnahmen, da es unmöglich ist, einen Datenvertrag mit der richtigen XML-Projektion zu generieren.
Beispielsweise kann das folgende Schemafragment nicht mithilfe der 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 Data Contract Schema Reference. Wenn ein Schema nicht den Datenvertragsregeln entspricht, verwenden Sie ein anderes Serialisierungsmodul. Beispielsweise verwendet das XmlSerializer seinen eigenen, separaten Mechanismus zum Schemaimport. Außerdem gibt es einen speziellen Importmodus, in dem der Bereich des unterstützten Schemas erweitert wird. Weitere Informationen finden Sie im Abschnitt zum Generieren von IXmlSerializable Typen im Importschema zum Generieren von Klassen.
Das XsdDataContractExporter
unterstützt alle .NET Framework-Typen, die mithilfe des DataContractSerializer
serialisiert werden können. Weitere Informationen finden Sie unter Typen, die vom Serializer für den Datenvertrag unterstützt werden. Beachten Sie, dass das mit der XsdDataContractExporter
Verwendung generierte Schema normalerweise gültige Daten aufweist, die dies XsdDataContractImporter
verwenden kann (es sei denn, das XmlSchemaProviderAttribute Schema wird zum Anpassen des Schemas verwendet).
Weitere Informationen zur Verwendung des XsdDataContractImporterSchemas finden Sie unter Importieren des Schemas zum Generieren von Klassen.
Weitere Informationen zur Verwendung des XsdDataContractExporterSchemas finden Sie unter Exportieren von Schemas aus Klassen.