Serialización

La serialización es el proceso de escribir valores en estructuras de datos de C (estructuras, matrices y valores primitivos) como un elemento XML. La deserialización es el proceso inverso.

La serialización es el proceso de escribir valores en estructuras de datos de C (estructuras, matrices y valores primitivos) como un elemento XML. La deserialización es el proceso inverso.

Ambos procesos se basan en una descripción de la asignación entre las estructuras de datos de C y el XML.

Diagrama que muestra cómo la serialización y la deserialización se basan en una descripción de la asignación entre las estructuras de datos de C y el XML.

Para serializar un valor, la aplicación llama a WsWriteElement, WsWriteAttribute o WsWriteType.

Para deserializar un valor, la aplicación llama a WsReadElement, WsReadAttribute o WsReadType.

Seguridad

Lector XML se usa en el proceso de deserialización. Consulte la sección de seguridad del Lector XML para obtener información de seguridad relacionada con XML.

El deserializador continúa deserializando los datos hasta que haya terminado de leer el elemento que se está deserializando. Se produce un error en el proceso de deserialización cuando encuentra cualquier documento XML que no se ajuste a la descripción de los datos que se deserializan. En ese momento, el lector XML que se usa deja de ser válido y se devuelve un error.

De forma predeterminada, la deserialización es estricta. Algunas condiciones que provocan un error en la deserialización incluyen, entre otras:

  • Faltan elementos esperados
  • Los campos de elementos inesperados aparecen entre los elementos necesarios
  • Contenido adicional del elemento después de los campos obligatorios, a menos que el WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT
  • Atributos inesperados, a menos que se especifique WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES marca
  • Valor de tipo de datos inesperado que está fuera del intervalo especificado
  • El recuento del elemento de repetición está fuera del intervalo especificado.

La serialización de una gran cantidad de datos puede provocar una asignación excesiva de memoria y puede provocar un ataque por denegación de servicio. El usuario que deserializa los datos debe especificar un objeto Montón para asignar los datos y el usuario puede usar el límite de asignación del montón para evitar ataques de asignación de memoria.

Compatibilidad de intervalos con tipos de datos, incluida la longitud máxima de la cadena, el número máximo de elementos en la matriz, etc. permite al usuario controlar el tamaño máximo de los distintos tipos de datos. El usuario puede especificar el intervalo en la descripción o el esquema de datos para limitar el tamaño máximo de los distintos datos.

Se admite un valor de cadena que contiene un cero incrustado en formatos de conexión (texto, binario, MTOM). Al deserializar una cadena con un cero incrustado, el usuario debe usar una cadena contada (WS_STRING), por lo que el cero no confundirá el cálculo de la longitud de la cadena. Si se deserializa un valor de cadena que contiene un cero incrustado en un campo que espera una cadena terminada en cero, se devuelve un error y se produce un error de deserialización. Si se usa wsutil para generar descripciones de datos, se debe usar la opción /string:WS_STRING si se espera una cadena con cero incrustado.

Las siguientes devoluciones de llamada se usan con la serialización:

Las enumeraciones siguientes se usan con serialización:

Las siguientes funciones se usan con la serialización:

Las estructuras siguientes se usan con la serialización: