Share via


Serialisierung

Serialisierung ist der Prozess, bei dem Werte in C-Datenstrukturen (Strukturen, Arrays und primitive Werte) als XML-Element geschrieben werden. Die Deserialisierung ist der umgekehrte Prozess.

Serialisierung ist der Prozess, bei dem Werte in C-Datenstrukturen (Strukturen, Arrays und primitive Werte) als XML-Element geschrieben werden. Die Deserialisierung ist der umgekehrte Prozess.

Beide Prozesse basieren auf einer Beschreibung der Zuordnung zwischen den C-Datenstrukturen und dem XML-Code.

Diagramm, das zeigt, wie Serialisierung und Deserialisierung auf einer Beschreibung der Zuordnung zwischen den C-Datenstrukturen und dem XML-Code basieren.

Zum Serialisieren eines Werts ruft die Anwendung WsWriteElement, WsWriteAttribute oder WsWriteType auf.

Zum Deserialisieren eines Werts ruft die Anwendung WsReadElement, WsReadAttribute oder WsReadType auf.

Sicherheit

DER XML-Reader wird im Deserialisierungsprozess verwendet. Informationen zu XML-bezogenen Sicherheitsinformationen finden Sie im Abschnitt "Sicherheit" im XML-Reader.

Der Deserialisierer setzt die Deserialisierung von Daten fort, bis das Lesen des elements, das deserialisiert wird, abgeschlossen ist. Der Deserialisierungsprozess schlägt fehl, wenn ein XML-Dokument gefunden wird, das nicht der Beschreibung der zu deserialisierten Daten entspricht. An diesem Punkt wird der verwendete XML-Reader ungültig, und es wird ein Fehler zurückgegeben.

Standardmäßig ist die Deserialisierung streng. Einige Bedingungen, die dazu führen, dass die Deserialisierung fehlschlägt, sind, aber nicht beschränkt auf:

  • Erwartete Elemente fehlen
  • Unerwartete Elementfelder werden zwischen erforderlichen Elementen angezeigt
  • Zusätzlicher Elementinhalt nach Pflichtfeldern, es sei denn, die WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT
  • Unerwartete Attribute, es sei denn , WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES Flag angegeben ist
  • Unerwarteter Datentypwert außerhalb des angegebenen Bereichs
  • Anzahl der wiederholten Elemente außerhalb des angegebenen Bereichs

Das Serialisieren großer Datenmengen kann zu einer übermäßigen Speicherbelegung führen und zu Einem Denial-of-Service-Angriff führen. Der Benutzer, der Daten deserialisiert, muss ein Heap-Objekt angeben, um die Daten zuzuordnen, und der Benutzer kann das Heapbelegungslimit verwenden, um Angriffe auf die Speicherbelegung zu verhindern.

Bereichsunterstützung für Datentypen, einschließlich der maximalen Länge für Zeichenfolge, der maximalen Elementanzahl im Array usw. ermöglicht es dem Benutzer, die maximale Größe für verschiedene Datentypen zu steuern. Der Benutzer kann einen Bereich in der Datenbeschreibung oder im Schema angeben, um die maximale Größe verschiedener Daten zu begrenzen.

Ein Zeichenfolgenwert, der eine eingebettete Null enthält, wird in den Drahtformaten (Text, Binärdatei, MTOM) unterstützt. Beim Deserialisieren einer Zeichenfolge mit einer eingebetteten Null sollte der Benutzer eine gezählte Zeichenfolge (WS_STRING) verwenden, damit die 0 die Berechnung der Länge der Zeichenfolge nicht verwechselt. Wenn ein Zeichenfolgenwert, der eine eingebettete Null enthält, in ein Feld deserialisiert wird, das eine Zeichenfolge mit Nulltermin erwartet, wird ein Fehler zurückgegeben, und die Deserialisierung schlägt fehl. Wenn wsutil zum Generieren von Datenbeschreibungen verwendet wird, sollte die Option /string:WS_STRING verwendet werden, wenn eine Zeichenfolge mit eingebetteter Null erwartet wird.

Die folgenden Rückrufe werden bei der Serialisierung verwendet:

Die folgenden Enumerationen werden bei der Serialisierung verwendet:

Die folgenden Funktionen werden bei der Serialisierung verwendet:

Die folgenden Strukturen werden bei der Serialisierung verwendet: