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.
Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.
Verwenden Sie die DataContractSerializer Klasse zum Serialisieren und Deserialisieren von Instanzen eines Typs in einen XML-Datenstrom oder -Dokument. Sie können z. B. einen Typ Person
mit Eigenschaften erstellen, die wesentliche Daten enthalten, z. B. einen Namen und eine Adresse. Anschließend können Sie eine Instanz der Person
Klasse erstellen und bearbeiten und alle zugehörigen Eigenschaftswerte in einem XML-Dokument für den späteren Abruf oder in einem XML-Datenstrom für den sofortigen Transport schreiben. Am wichtigsten ist es, dass DataContractSerializer zur Serialisierung und Deserialisierung von Daten verwendet wird, die in WCF-Nachrichten (Windows Communication Foundation) gesendet werden. Wenden Sie das DataContractAttribute-Attribut auf Klassen und das DataMemberAttribute-Attribut auf Klassenmitglieder an, um Eigenschaften und Felder anzugeben, die serialisiert werden.
Eine Liste der Typen, die serialisiert werden können, finden Sie unter Typen, die vom Serialisierer für den Datenvertrag unterstützt werden.
Um das DataContractSerializerFormat zu verwenden, erstellen Sie zuerst eine Instanz einer Klasse und ein Objekt, das zum Schreiben oder Lesen des Formats geeignet ist, z. B. eine Instanz der XmlDictionaryWriter. Rufen Sie dann die WriteObject Methode auf, um die Daten beizubehalten. Um Daten abzurufen, erstellen Sie ein Objekt, das zum Lesen des Datenformats (z. B. ein XmlDictionaryReader XML-Dokument) geeignet ist, und rufen Sie die ReadObject Methode auf.
Weitere Informationen zur Verwendung von DataContractSerializerSerialisierung und Deserialisierung finden Sie unter "Serialisierung" und "Deserialisierung".
Sie können den Typ eines Datenvertrag-Serializers mithilfe des <dataContractSerializer-Elements> in einer Client-Anwendungskonfigurations-Datei festlegen.
Vorbereiten von Klassen für die Serialisierung oder Deserialisierung
Das DataContractSerializer wird in Kombination mit den DataContractAttribute und DataMemberAttribute Klassen verwendet. Um eine Klasse für die Serialisierung vorzubereiten, wenden Sie DataContractAttribute auf die Klasse an. Wenden Sie für jedes Mitglied der Klasse, das Daten zurückgibt, die Sie serialisieren möchten, die DataMemberAttribute an. Sie können Felder und Eigenschaften unabhängig von den Zugriffsrechten serialisieren: privat, geschützt, intern, geschützt intern oder öffentlich.
Ihr Schema gibt z. B. eine Customer
mit einer ID
-Eigenschaft an, aber Sie verfügen bereits über eine vorhandene Anwendung, die einen Typ namens Person
mit einer Name
-Eigenschaft verwendet. Um einen Typ zu erstellen, der dem Vertrag entspricht, wenden Sie zuerst die DataContractAttribute Klasse an. Wenden Sie dann DataMemberAttribute auf jedes Feld oder jede Eigenschaft an, die Sie serialisieren möchten.
Hinweis
Sie können dies DataMemberAttribute sowohl für private als auch für öffentliche Mitglieder anwenden.
Das endgültige Format der XML muss kein Text sein. Stattdessen schreibt die DataContractSerializer die Daten als XML-Infoset, mit dem Sie die Daten in ein beliebiges Format schreiben können, das von dem XmlReader und XmlWriter erkannt wird. Es wird empfohlen, die Klassen XmlDictionaryReader und XmlDictionaryWriter zum Lesen und Schreiben zu verwenden, da beide für die Arbeit mit DataContractSerializer optimiert sind.
Wenn Sie eine Klasse erstellen, die Felder oder Eigenschaften enthält, die vor dem Auftreten der Serialisierung oder Deserialisierung aufgefüllt werden müssen, verwenden Sie Rückrufattribute, wie in Version-Tolerant Serialisierungsrückrufen beschrieben.
Zur Auflistung bekannter Typen hinzufügen
Beim Serialisieren oder Deserialisieren eines Objekts ist es erforderlich, dass der Typ für das DataContractSerializerObjekt "bekannt" ist. Erstellen Sie zunächst eine Instanz einer Klasse, die IEnumerable<T> implementiert (z. B. List<T>), und fügen Sie die bekannten Typen zur Auflistung hinzu. Erstellen Sie dann eine Instanz von DataContractSerializer, indem Sie eine der Überladungen verwenden, die IEnumerable<T> übernimmt (z. B. DataContractSerializer(Type, IEnumerable<Type>)).
Hinweis
Im Gegensatz zu anderen Grundtypen ist die DateTimeOffset Struktur standardmäßig kein bekannter Typ, daher muss sie der Liste bekannter Typen manuell hinzugefügt werden (siehe Bekannte Datentypen für Datenvertrag).
Vorwärtskompatibilität
Die DataContractSerializer versteht Datenverträge, die so konzipiert wurden, dass sie mit zukünftigen Versionen des Vertrags kompatibel sind. Solche Typen implementieren die IExtensibleDataObject Schnittstelle. Die Schnittstelle verfügt über die ExtensionData Eigenschaft, die ein ExtensionDataObject Objekt zurückgibt. Weitere Informationen finden Sie unter Forward-Compatible Datenverträge.
Ausführung mit teilweisem Vertrauen
Beim Instanziieren des Zielobjekts während der Deserialisierung ruft der DataContractSerializer nicht den Konstruktor des Zielobjekts auf. Wenn Sie einen [DataContract] -Typ erstellen, der von einer teilweisen Vertrauensstellung aus zugänglich ist (d. h. öffentlich und in einer Assembly, auf die das AllowPartiallyTrustedCallers
Attribut angewendet wurde) und einige sicherheitsbezogene Aktionen ausführt, müssen Sie beachten, dass der Konstruktor nicht aufgerufen wird. Insbesondere funktionieren die folgenden Techniken nicht:
- Sie können den teilweise vertrauenswürdigen Zugriff nicht einschränken, indem Sie den Konstruktor als intern oder privat definieren oder indem Sie einen
LinkDemand
zu dem Konstruktor hinzufügen. Beide Methoden sind bei der Deserialisierung unter teilweiser Vertrauenswürdigkeit unwirksam. - Wenn Sie die Klasse codieren, die davon ausgeht, dass der Konstruktor ausgeführt wurde, wird die Klasse möglicherweise in einen ungültigen internen Zustand versetzt, der ausnutzbar ist.