Serialisering
Serialisering är processen att skriva värden i C-datastrukturer (structs, matriser och primitiva värden) som ett XML-element. Deserialisering är den omvända processen.
Serialisering är processen att skriva värden i C-datastrukturer (strukturer, matriser och primitiva värden) som ett XML-element. Deserialisering är den omvända processen.
Båda processerna förlitar sig på en beskrivning av mappningen mellan C-datastrukturerna och XML.
För att serialisera ett värde anropar programmet WsWriteElement, WsWriteAttribute eller WsWriteType.
För att deserialisera ett värde anropar programmet WsReadElement, WsReadAttribute eller WsReadType.
Säkerhet
XML-läsare används i deserialiseringsprocessen. Se säkerhetsavsnittet i XML-läsare för XML-relaterad säkerhetsinformation.
Deserialiseraren fortsätter att deserialisera data tills den har slutfört läsningen av elementet som deserialiseras. Deserialiseringsprocessen misslyckas när det påträffar ett XML-dokument som inte överensstämmer med beskrivningen av de data som deserialiseras. Vid den tidpunkten blir XML-läsaren som används ogiltig och ett fel returneras.
Som standard är deserialisering strikt. Vissa villkor som gör att deserialiseringen misslyckas inkluderar men inte begränsat till:
- Förväntade element saknas
- Oväntade elementfält visas mellan obligatoriska element
- Extra elementinnehåll efter obligatoriska fält, såvida inte WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT
- Oväntade attribut, såvida inte WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES flagga har angetts
- Oväntat datatypsvärde som ligger utom angivet intervall
- Antalet upprepande element ligger utom det angivna intervallet
Serialisering av stora mängder data kan orsaka överdriven minnesallokering och kan orsaka överbelastningsattacker. Användaren som deserialiserar data måste ange ett Heap-objekt för att allokera data och användaren kan använda heapallokeringsgränsen för att förhindra angrepp på minnesallokering.
Intervallstöd för datatyper, inklusive maximal längd för sträng, maximalt antal element i matris osv. gör att användaren kan styra den maximala storleken för olika datatyper. Användaren kan ange intervall i databeskrivningen eller schemat för att begränsa den maximala storleken på olika data.
Ett strängvärde som innehåller en inbäddad nolla stöds i trådformaten (text, binär, MTOM). När du deserialiserar en sträng med en inbäddad nolla bör användaren använda en räknad sträng (WS_STRING) så att nollan inte förvirrar beräkningen av strängens längd. Om ett strängvärde som innehåller en inbäddad nolla deserialiseras till ett fält som förväntar sig en nollsluten sträng returneras ett fel och deserialiseringen misslyckas. Om wsutil används för att generera databeskrivningar bör alternativet /string:WS_STRING användas om sträng med inbäddad nolla förväntas.
Följande återanrop används med serialisering:
Följande uppräkningar används med serialisering:
Följande funktioner används med serialisering:
Följande strukturer används med serialisering:
- 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