Udostępnij za pośrednictwem


Szeregowanie

Serializacja to proces zapisywania wartości w strukturach danych języka C (struktury, tablice i wartości pierwotne) jako element XML. Deserializacja jest procesem odwrotnym.

Serializacja to proces zapisywania wartości w strukturach danych języka C (struktury, tablice i wartości pierwotne) jako element XML. Deserializacja jest procesem odwrotnym.

Oba procesy opierają się na opisie mapowania między strukturami danych języka C a plikiem XML.

Diagram przedstawiający sposób serializacji i deserializacji polega na opisie mapowania między strukturami danych języka C a plikiem XML.

Aby serializować wartość, aplikacja wywołuje WsWriteElement, WsWriteAttribute lub WsWriteType.

Aby wykonać deserializowanie wartości, aplikacja wywołuje WsReadElement, WsReadAttribute lub WsReadType.

Bezpieczeństwo

czytnika XML jest używany w procesie deserializacji. Zapoznaj się z sekcją zabezpieczeń w czytniku XML dla informacji o zabezpieczeniach związanych z xml.

Deserializator kontynuuje deserializacji danych, dopóki nie zakończy odczytywania elementu, który jest deserializowany. Proces deserializacji kończy się niepowodzeniem, gdy napotka on dowolny dokument XML, który nie jest zgodny z opisem deserializacji danych. W tym momencie używany czytnik XML staje się nieprawidłowy i zwracany jest błąd.

Domyślnie deserializacja jest ścisła. Niektóre warunki, które powodują niepowodzenie deserializacji, obejmują, ale nie tylko:

  • Brak oczekiwanych elementów
  • Nieoczekiwane pola elementów są wyświetlane między wymaganymi elementami
  • Dodatkowa zawartość elementu po wymaganych polach, chyba że WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT
  • Nieoczekiwane atrybuty, chyba że określono flagę WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES
  • Nieoczekiwana wartość typu danych, która jest poza określonym zakresem
  • Liczba powtarzających się elementów jest poza określonym zakresem

Serializowanie dużej ilości danych może spowodować nadmierną alokację pamięci i spowodować atak typu "odmowa usługi". Użytkownik, który deserializuje dane, musi określić obiekt sterty w celu przydzielenia danych, a użytkownik może użyć limitu alokacji sterty, aby zapobiec atakowi alokacji pamięci.

Obsługa zakresu dla typów danych, w tym maksymalna długość ciągu, maksymalna liczba elementów w tablicy itp. umożliwia użytkownikowi kontrolowanie maksymalnego rozmiaru dla różnych typów danych. Użytkownik może określić zakres w opisie danych lub schemacie, aby ograniczyć maksymalny rozmiar różnych danych.

Wartość ciągu zawierająca osadzone zero jest obsługiwana w formatach przewodu (tekst, binarny, MTOM). Podczas deserializacji ciągu z osadzonym zerem użytkownik powinien użyć zliczonego ciągu (WS_STRING), aby zero nie mylić obliczenia długości ciągu. Jeśli wartość ciągu zawierająca osadzone zero jest deserializowana w polu, które oczekuje ciągu bez zakończenia, zwracany jest błąd i deserializacja kończy się niepowodzeniem. Jeśli wsutil jest używany do generowania opisów danych, /string:WS_STRING opcja powinna być używana, jeśli ciąg z osadzonym zerem jest oczekiwany.

Następujące wywołania zwrotne są używane z serializacji:

Następujące wyliczenia są używane z serializacji:

Następujące funkcje są używane z serializacji:

Następujące struktury są używane z serializacji: