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.
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:
- WsReadAttribute
- WsReadElement
- WsReadType
- WsWriteAttribute
- WsWriteElement
- WsWriteType
Następujące struktury są używane z serializacji:
- WS_ATTRIBUTE_DESCRIPTION
- WS_BOOL_DESCRIPTION
- WS_BYTES_DESCRIPTION
- WS_BYTE_ARRAY_DESCRIPTION
- WS_CHAR_ARRAY_DESCRIPTION
- WS_CUSTOM_TYPE_DESCRIPTION
- WS_DATETIME_DESCRIPTION
- WS_DECIMAL_DESCRIPTION
- WS_DEFAULT_VALUE
- WS_DOUBLE_DESCRIPTION
- WS_DURATION_DESCRIPTION
- WS_ELEMENT_DESCRIPTION
- WS_ENDPOINT_ADDRESS_DESCRIPTION
- WS_ENUM_DESCRIPTION
- WS_ENUM_VALUE
- WS_FAULT_DESCRIPTION
- WS_FIELD_DESCRIPTION
- WS_FLOAT_DESCRIPTION
- WS_GUID_DESCRIPTION
- WS_INT16_DESCRIPTION
- WS_INT32_DESCRIPTION
- WS_INT64_DESCRIPTION
- WS_INT8_DESCRIPTION
- WS_ITEM_RANGE
- WS_STRING_DESCRIPTION
- WS_STRUCT_DESCRIPTION
- WS_TIMESPAN_DESCRIPTION
- WS_UINT16_DESCRIPTION
- WS_UINT32_DESCRIPTION
- WS_UINT64_DESCRIPTION
- WS_UINT8_DESCRIPTION
- WS_UNION_DESCRIPTION
- WS_UNION_FIELD_DESCRIPTION
- WS_UNIQUE_ID_DESCRIPTION
- WS_UTF8_ARRAY_DESCRIPTION
- WS_VOID_DESCRIPTION
- WS_WSZ_DESCRIPTION
- WS_XML_QNAME_DESCRIPTION
- WS_XML_STRING_DESCRIPTION