Freigeben über


System.Runtime.Serialization.DataContractAttribute-Klasse

Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.

Wenden Sie das DataContractAttribute Attribut auf Typen (Klassen, Strukturen oder Enumerationen) an, die in Serialisierungs- und Deserialisierungsvorgängen durch die DataContractSerializer verwendet werden. Wenn Sie Nachrichten mithilfe der Windows Communication Foundation (WCF)-Infrastruktur senden oder empfangen, sollten Sie das DataContractAttribute auch auf alle Klassen anwenden, die in Nachrichten gesendete Daten enthalten und bearbeiten. Weitere Informationen zu Datenverträgen finden Sie unter Verwenden von Datenverträgen.

Sie müssen DataMemberAttribute auch auf jedes Feld, jede Eigenschaft oder jedes Ereignis anwenden, das Werte enthält, die Sie serialisieren möchten. Durch Anwenden des DataContractAttribute ermöglichen es Sie dem DataContractSerializer, die Daten explizit zu serialisieren und zu deserialisieren.

Vorsicht

Sie können die DataMemberAttribute auf private Felder anwenden. Beachten Sie, dass die vom Feld zurückgegebenen Daten (auch wenn es privat ist) serialisiert und deserialisiert werden und somit von einem böswilligen Benutzer oder Prozess angezeigt oder abgefangen werden können.

Weitere Informationen zu Datenverträgen finden Sie in den Themen unter Verwendung von Datenverträgen.

Datenverträge

Ein Datenvertrag ist eine abstrakte Beschreibung einer Gruppe von Feldern mit einem Namen und Datentyp für jedes Feld. Der Datenvertrag ist außerhalb einer einzelnen Implementierung vorhanden, damit Dienste auf verschiedenen Plattformen zusammenarbeiten können. Solange die zwischen den Diensten übergebenen Daten demselben Vertrag entsprechen, können alle Dienste die Daten verarbeiten. Diese Verarbeitung wird auch als lose gekoppeltes System bezeichnet. Ein Datenvertrag ähnelt auch einer Schnittstelle, in der der Vertrag angibt, wie Daten übermittelt werden müssen, damit sie von einer Anwendung verarbeitet werden können. Der Datenvertrag kann z. B. einen Datentyp namens "Person" mit zwei Textfeldern namens "Vorname" und "Nachname" aufrufen. Um einen Datenvertrag zu erstellen, wenden Sie die DataContractAttribute Klasse an, und wenden Sie die DataMemberAttribute auf alle Felder oder Eigenschaften an, die serialisiert werden müssen. Bei der Serialisierung entsprechen die Daten dem Datenvertrag, der implizit in den Typ integriert ist.

Hinweis

Ein Datenvertrag unterscheidet sich erheblich von einer tatsächlichen Schnittstelle im Vererbungsverhalten. Schnittstellen werden an abgeleitete Typen vererbt. Wenn Sie die DataContractAttribute Auf eine Basisklasse anwenden, erben die abgeleiteten Typen nicht das Attribut oder das Verhalten. Wenn ein abgeleiteter Typ jedoch über einen Datenvertrag verfügt, werden die Datenmitglieder der Basisklasse serialisiert. Sie müssen jedoch die neuen Member in einer abgeleiteten Klasse mit DataMemberAttribute markieren, um sie serialisierbar zu machen.

XML-Schemadokumente und das SvcUtil-Tool

Wenn Sie Daten mit anderen Diensten austauschen, müssen Sie den Datenvertrag beschreiben. Für die aktuelle Version des DataContractSerializerXml-Schemas kann ein XML-Schema verwendet werden, um Datenverträge zu definieren. (Andere Formen von Metadaten/Beschreibungen können für denselben Zweck verwendet werden.) Um ein XML-Schema aus Ihrer Anwendung zu erstellen, verwenden Sie das ServiceModel Metadata Utility Tool (Svcutil.exe) mit der Befehlszeilenoption "/dconly ". Wenn die Eingabe für das Tool standardmäßig eine Assembly ist, generiert das Tool eine Reihe von XML-Schemas, die alle in dieser Assembly gefundenen Datentypen definieren. Umgekehrt können Sie auch das Svcutil.exe Tool verwenden, um Visual Basic- oder C#-Klassendefinitionen zu erstellen, die den Anforderungen von XML-Schemas entsprechen, die Konstrukte verwenden, die durch Datenverträge ausgedrückt werden können. In diesem Fall ist die Befehlszeilenoption "/dconly " nicht erforderlich.

Wenn es sich bei der Eingabe für das Svcutil.exe-Tool um ein XML-Schema handelt, erstellt das Tool standardmäßig eine Reihe von Klassen. Wenn Sie diese Klassen untersuchen, stellen Sie fest, dass DataContractAttribute angewendet wurde. Sie können diese Klassen verwenden, um eine neue Anwendung zum Verarbeiten von Daten zu erstellen, die mit anderen Diensten ausgetauscht werden müssen.

Sie können das Tool auch für einen Endpunkt ausführen, der ein WSDL-Dokument (Web Services Description Language) zurückgibt, um den Code und die Konfiguration automatisch zu generieren, um einen Windows Communication Foundation (WCF)-Client zu erstellen. Der generierte Code enthält Typen, die mit DataContractAttribute markiert sind.

Vorhandene Typen wiederverwenden

Ein Datenvertrag hat zwei grundlegende Anforderungen: einen stabilen Namen und eine Liste von Mitgliedern. Der stabile Name besteht aus dem Namespace uniform resource identifier (URI) und dem lokalen Namen des Vertrags. Wenn Sie die DataContractAttribute Klasse auf eine Klasse anwenden, verwendet sie standardmäßig den Klassennamen als lokalen Namen und den Namespace der Klasse (präfixiert mit "http://schemas.datacontract.org/2004/07/"dem Präfix ) als Namespace-URI. Sie können die Standardwerte überschreiben, indem Sie die Name und die Namespace Eigenschaften festlegen. Sie können den Namespace auch ändern, indem Sie ContractNamespaceAttribute auf den Namespace anwenden. Verwenden Sie diese Funktion, wenn Sie über einen vorhandenen Typ verfügen, der Daten genau so verarbeitet, wie Sie es benötigen, aber über einen anderen Namespace- und Klassennamen als den Datenvertrag verfügt. Durch Überschreiben der Standardwerte können Sie Ihren vorhandenen Typ wiederverwenden und die serialisierten Daten dem Datenvertrag entsprechen lassen.

Hinweis

In jedem Code können Sie das Wort DataContract anstelle des längeren DataContractAttributeWorts verwenden.

Versionsverwaltung

Ein Datenvertrag kann auch spätere Versionen von sich selbst berücksichtigen. Das heißt, wenn eine spätere Version des Vertrags zusätzliche Daten enthält, werden diese Daten gespeichert und an einen Absender unverändert zurückgegeben. Implementieren Sie dazu die IExtensibleDataObject Schnittstelle.

Weitere Informationen zur Versionsverwaltung finden Sie unter Datenvertragsversionsverwaltung.