Serialização
Serialização é o processo de escrever valores em estruturas de dados C (structs, arrays e valores primitivos) como um elemento XML. A desserialização é o processo inverso.
Serialização é o processo de escrever valores em estruturas de dados C (estruturas, matrizes e valores primitivos) como um elemento XML. A desserialização é o processo inverso.
Ambos os processos 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
XML Reader é usado no processo de desserialização. Consulte a seção de segurança no XML Reader para obter informações de segurança relacionadas a XML.
O desserializador continua a desserializar dados até concluir a leitura do elemento que está sendo desserializado. O processo de desserialização falha quando encontra 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 é restrita. Algumas condições que causam falha na desserialização incluem, mas não estão limitadas a:
- Faltam elementos esperados
- Os campos de elementos inesperados aparecem entre os elementos obrigatórios
- Conteúdo de elemento extra após campos obrigató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 fora do intervalo especificado
- A contagem de elementos repetitivos está fora do intervalo especificado
A serialização de uma grande quantidade de dados pode causar alocação excessiva de memória e pode causar ataques 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.
O suporte de intervalo para tipos de dados, incluindo comprimento máximo para string, 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 esquema para limitar o tamanho máximo de dados diferentes.
Um valor de cadeia de caracteres contendo um zero incorporado é suportado nos formatos de fio (texto, binário, MTOM). Ao desserializar uma cadeia de caracteres com um zero incorporado, 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 contendo um zero incorporado for desserializado em um campo que espera uma cadeia de caracteres terminada por 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 deve ser usada se a string com zero incorporado for esperada.
Os seguintes retornos de chamada são usados com serialização:
As enumerações a seguir 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:
- 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