Ler em inglês

Compartilhar via


Serialização

Serialização é o processo de gravação de valores em estruturas de dados C (structs, matrizes e valores primitivos) como um elemento XML. Desserialização é o processo inverso.

Serialização é o processo de gravação de valores em estruturas de dados C (estruturas, matrizes e valores primitivos) como um elemento XML. Desserialização é o processo inverso.

Ambos os processos dependem de uma descrição do mapeamento entre as estruturas de dados C e o XML.

Diagrama mostrando como a serialização e a desserialização dependem de uma descrição do mapeamento entre as estruturas de dados C e o XML.

Para serializar um valor, o aplicativo chama WsWriteElement, WsWriteAttribute ou WsWriteType.

Para desserializar um valor, o aplicativo chama WsReadElement, WsReadAttribute ou WsReadType.

Segurança

O Leitor de XML é usado no processo de desserialização. Consulte a seção de segurança em Leitor XML para obter informações de segurança relacionadas a XML.

O desserializador continua desserializar dados até concluir a leitura do elemento que está sendo desserializado. O processo de desserialização falha ao encontrar qualquer documento XML que não esteja em conformidade com a descrição dos dados que estão sendo desserializados. Nesse ponto, o leitor XML que está sendo usado torna-se inválido e um erro é retornado.

Por padrão, a desserialização é estrita. Algumas condições que fazem com que a desserialização falhe incluem, mas não se limitam a:

  • Elementos esperados estão ausentes
  • Campos de elemento inesperados aparecem entre os elementos necessários
  • Conteúdo de elemento extra após os campos necessários, a menos que o WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT
  • Atributos inesperados, a menos que WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES sinalizador seja especificado
  • Valor de tipo de dados inesperado que está fora do intervalo especificado
  • A contagem de elementos repetidos está fora do intervalo especificado

Serializar uma grande quantidade de dados pode causar alocação excessiva de memória e pode causar ataque de negação de serviço. O usuário que está desserializando dados deve especificar um objeto Heap para alocar os dados e o usuário pode usar o limite de alocação de heap para evitar ataques de alocação de memória.

Suporte de intervalo para tipos de dados, incluindo comprimento máximo para cadeia de caracteres, contagem máxima de elementos na matriz etc. permite que o usuário controle o tamanho máximo para diferentes tipos de dados. O usuário pode especificar o intervalo na descrição de dados ou no esquema para limitar o tamanho máximo de dados diferentes.

Há suporte para um valor de cadeia de caracteres que contém um zero inserido nos formatos de fio (texto, binário, MTOM). Ao desserializar uma cadeia de caracteres com um zero inserido, o usuário deve usar uma cadeia de caracteres contada (WS_STRING) para que o zero não confunda o cálculo do comprimento da cadeia de caracteres. Se um valor de cadeia de caracteres que contém um zero inserido for desserializado em um campo que espera uma cadeia de caracteres terminada em zero, um erro será retornado e a desserialização falhará. Se wsutil for usado para gerar descrições de dados, a opção /string:WS_STRING deverá ser usada se a cadeia de caracteres com zero inserido for esperada.

Os seguintes retornos de chamada são usados com serialização:

As seguintes enumerações são usadas com serialização:

As seguintes funções são usadas com serialização:

As seguintes estruturas são usadas com serialização: