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 bei Serialisierungs- und Deserialisierungsvorgängen vom DataContractSerializer verwendet werden. Wenn Sie Nachrichten mithilfe der Windows Communication Foundation (WCF)-Infrastruktur senden oder empfangen, sollten Sie auch die DataContractAttribute 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 den DataMemberAttribute auch auf alle Felder, Eigenschaften oder Ereignisse anwenden, die Werte enthalten, die Sie serialisieren möchten. Indem Sie den DataContractAttribute anwenden, aktivieren Sie explizit den DataContractSerializer zum Serialisieren und Deserialisieren der Daten.

Achtung

Sie können den DataMemberAttribute auf private Felder anwenden. Beachten Sie, dass die von dem Feld zurückgegebenen Daten (auch bei privaten Feldern) serialisiert und deserialisiert werden und daher von böswilligen Benutzern oder Vorgängen 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 befindet sich außerhalb einzelner Implementierungen, um die Zusammenarbeit zwischen den Diensten verschiedener Plattformen zu ermöglichen. Solange die zwischen den Diensten übermittelten Daten demselben Vertrag entsprechen, können sie von allen Diensten verarbeitet werden. Diese Verarbeitung wird auch als lose gekoppeltes System bezeichnet. Ein Datenvertrag ist auch mit einer Schnittstelle vergleichbar, da der Vertrag angibt, wie die Daten zu übermitteln sind, um von einer Anwendung verarbeitet werden zu können. Der Datenvertrag kann beispielsweise einen Datentyp mit der Bezeichnung 'Person' erfordern, der zwei Textfelder mit der Bezeichnung 'Vorname' und 'Nachname' enthält. Um einen Datenvertrag zu erstellen, können Sie den DataContractAttribute auf die Klasse anwenden und den DataMemberAttribute auf Felder oder Eigenschaften anwenden, die serialisiert werden müssen. Wenn die Daten serialisiert sind, entsprechen sie dem implizit in den Typ integrierten Datenvertrag.

Hinweis

Ein Datenvertrag unterscheidet sich in seinem Vererbungsverhalten deutlich von einer tatsächlichen Schnittstelle. Schnittstellen werden an abgeleitete Typen vererbt. Wenn Sie den DataContractAttribute auf eine Basisklasse anwenden, erben die abgeleiteten Typen das Attribut oder das Verhalten nicht. Wenn ein abgeleiteter Typ jedoch einen Datenvertrag hat, werden die Datenmember der Basisklasse serialisiert. Sie müssen den DataMemberAttribute jedoch auf neue Member in einer abgeleiteten Klasse anwenden, um sie serialisierbar zu machen.

XML-Schemadokumente und das SvcUtil-Tool

Wenn Sie Daten mit anderen Diensten austauschen, muss der Datenvertrag beschrieben werden. Für die aktuelle Version des DataContractSerializer 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 das Input in Ihr Tool eine Assembly ist, generiert das Tool standardmäßig eine Gruppe von XML-Schemas, die alle in dieser Assembly gefundenen Datenvertragstypen definieren. Umgekehrt können Sie das Tool Svcutil.exe auch verwenden, um den Anforderungen von XML-Schemas entsprechende Klassendefinitionen für Visual Basic oder C# zu erstellen, die Konstrukte verwenden, die durch Datenverträge ausgedrückt werden können. In diesem Fall ist die Befehlszeilenoption "/dconly " nicht erforderlich.

Wenn in das Tool Svcutil.exe ein XML-Schema eingegeben wird, erstellt das Tool standardmäßig eine Reihe von Klassen. Wenn Sie diese Klassen prüfen, stellen Sie fest, dass der DataContractAttribute verwendet wurde. Sie können diese Klassen verwenden, um eine neue Anwendung zur Verarbeitung 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 schließt Typen ein, die mit dem DataContractAttribute gekennzeichnet sind.

Vorhandene Typen wiederverwenden

Ein Datenvertrag verfügt über zwei grundlegende Anforderungen: einen stabilen Namen und eine Liste von Membern. Der stabile Name besteht aus dem Namespace-URI (Uniform Resource Identifier) 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. Diese Standardwerte können durch Festlegen der Eigenschaften Name und Namespace überschrieben werden. Sie können auch den Namespace ändern, indem Sie den ContractNamespaceAttribute auf den Namespace anwenden. Sie können diese Fähigkeit bei einem bestehenden Typ nutzen, der Daten genau nach Ihren Anforderungen verarbeitet, jedoch einen anderen Namespace und Klassennamen aufweist als im Datenvertrag. Durch Überschreiben der Standardwerte können Sie Ihren vorhandenen Typ wiederverwenden und gewährleisten, dass die serialisierten Daten dem Datenvertrag entsprechen.

Hinweis

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

Versionsverwaltung

Ein Datenvertrag kann auch höhere Versionen seiner selbst nutzen. Wenn eine höhere Version des Vertrags zusätzliche Daten enthält, werden diese Daten gespeichert und unverändert an den Absender zurückgegeben. Hierzu müssen Sie die IExtensibleDataObject-Schnittstelle implementieren.

Weitere Informationen zur Versionsverwaltung finden Sie unter Datenvertragsversionsverwaltung.