Condividi tramite


Serializzazione

La serializzazione è il processo di scrittura di valori nelle strutture di dati C (struct, matrici e valori primitivi) come elemento XML. La deserializzazione è il processo inverso.

La serializzazione è il processo di scrittura di valori in strutture di dati C (strutture, matrici e valori primitivi) come elemento XML. La deserializzazione è il processo inverso.

Entrambi i processi si basano su una descrizione del mapping tra le strutture di dati C e il codice XML.

Diagramma che illustra come la serializzazione e la deserializzazione si basano su una descrizione del mapping tra le strutture di dati C e il codice XML.

Per serializzare un valore, l'applicazione chiama WsWriteElement, WsWriteAttribute o WsWriteType.

Per deserializzare un valore, l'applicazione chiama WsReadElement, WsReadAttribute o WsReadType.

Sicurezza

Il lettore XML viene usato nel processo di deserializzazione. Fare riferimento alla sezione sicurezza in Xml Reader per le informazioni di sicurezza correlate a XML.

Il deserializzatore continua a deserializzare i dati fino al completamento della lettura dell'elemento deserializzato. Il processo di deserializzazione ha esito negativo quando rileva qualsiasi documento XML che non è conforme alla descrizione dei dati deserializzati. A quel punto il lettore XML usato diventa non valido e viene restituito un errore.

Per impostazione predefinita, la deserializzazione è rigorosa. Alcune condizioni che causano l'esito negativo della deserializzazione includono, ma non sono limitate a:

  • Gli elementi previsti sono mancanti
  • I campi degli elementi imprevisti vengono visualizzati tra gli elementi obbligatori
  • Contenuto dell'elemento aggiuntivo dopo i campi obbligatori, a meno che il WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT
  • Attributi imprevisti, a meno che non venga specificato WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES flag
  • Valore del tipo di dati imprevisto non compreso nell'intervallo specificato
  • Numero di elementi ripetuti non compresi nell'intervallo specificato

La serializzazione di grandi quantità di dati potrebbe causare un'allocazione eccessiva della memoria e può causare un attacco denial of service. L'utente che sta deserializzando i dati deve specificare un oggetto Heap per allocare i dati e l'utente può usare il limite di allocazione heap per evitare attacchi di allocazione della memoria.

Supporto dell'intervallo per i tipi di dati, tra cui lunghezza massima per stringa, numero massimo di elementi nella matrice e così via. consente all'utente di controllare le dimensioni massime per tipi di dati diversi. L'utente può specificare l'intervallo nella descrizione dei dati o nello schema per limitare le dimensioni massime di dati diversi.

Un valore stringa contenente uno zero incorporato è supportato nei formati di fili (testo, binario, MTOM). Quando si deserializzazione di una stringa con zero incorporato, l'utente deve usare una stringa conteggiata (WS_STRING) in modo che lo zero non confonda il calcolo della lunghezza della stringa. Se un valore stringa contenente uno zero incorporato viene deserializzato in un campo che prevede una stringa con terminazione zero, viene restituito un errore e la deserializzazione ha esito negativo. Se wsutil viene usato per generare descrizioni dei dati, l'opzione /string:WS_STRING deve essere usata se è prevista la stringa con zero incorporato.

I callback seguenti vengono usati con serializzazione:

Le enumerazioni seguenti vengono usate con serializzazione:

Le funzioni seguenti vengono usate con la serializzazione:

Le strutture seguenti vengono usate con serializzazione: