Serializace
Serializace je proces zápisu hodnot v datových strukturách jazyka C (struktury, pole a primitivní hodnoty) jako element XML. Deserializace je reverzní proces.
Serializace je proces zápisu hodnot v datových strukturách jazyka C (struktury, pole a primitivní hodnoty) jako element XML. Deserializace je reverzní proces.
Oba procesy spoléhají na popis mapování mezi datovými strukturami jazyka C a XML.
K serializaci hodnoty aplikace volá WsWriteElement, WsWriteAttribute nebo WsWriteType.
Chcete-li deserializovat hodnotu, aplikace volá WsReadElement, WsReadAttribute nebo WsReadType.
Bezpečnost
čtečky XML se používá v procesu deserializace. Informace o zabezpečení související se zabezpečením XML najdete v oddílu zabezpečení ve čtečce XML.
Deserializátor pokračuje v deserializaci dat, dokud nedokončí čtení prvku, který je deserializován. Proces deserializace selže, když narazí na jakýkoli dokument XML, který neodpovídá popisu dat, která jsou deserializována. V tomto okamžiku bude použitá čtečka XML neplatná a vrátí se chyba.
Ve výchozím nastavení je deserializace striktní. Mezi některé podmínky, které způsobují selhání deserializace, patří mimo jiné:
- Chybí očekávané elementy.
- Mezi požadovanými prvky se zobrazí neočekávaná pole elementu.
- Obsah dodatečného prvku po povinných polích, pokud WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT
- Neočekávané atributy, pokud není zadán příznak WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES
- Neočekávaná hodnota datového typu, která je mimo zadaný rozsah
- Počet opakujících se prvků je mimo zadaný rozsah.
Serializace velkého množství dat může způsobit nadměrné přidělení paměti a může způsobit útok na dostupnost služby. Uživatel, který deserializuje data, musí zadat objekt haldy k přidělení dat a uživatel může použít limit přidělení haldy, aby zabránil útoku na přidělení paměti.
Podpora rozsahu pro datové typy, včetně maximální délky řetězce, maximálního počtu prvků v poli atd. umožňuje uživateli řídit maximální velikost pro různé datové typy. Uživatel může zadat rozsah v popisu dat nebo schématu, aby omezil maximální velikost různých dat.
Řetězcová hodnota obsahující vloženou nulu je podporována ve formátech drátů (text, binární, MTOM). Při deserializaci řetězce s vloženou nulou by uživatel měl použít počítaný řetězec (WS_STRING), takže nula nezaměňuje výpočet délky řetězce. Pokud je řetězcová hodnota obsahující vloženou nulu deserializována do pole, které očekává řetězec s nulovým ukončením, vrátí se chyba a deserializace selže. Pokud se wsutil používá ke generování popisů dat, měla by být použita možnost /string:WS_STRING, pokud je očekáván řetězec s vloženou nulou.
Při serializaci se používají následující zpětná volání:
Při serializaci se používají následující výčty:
Při serializaci se používají následující funkce:
Při serializaci se používají následující struktury:
- 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