Sdílet prostřednictvím


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.

Diagram znázorňující, jak serializace a deserializace závisí na popisu 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: