Compartir vía


Serialización

La serialización es el proceso de escritura de 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 escritura de 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 se basa la serialización y deserialización 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 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 va a deserializar. 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 no es válido y se devuelve un error.

De forma predeterminada, la deserialización es estricta. Algunas condiciones que hacen que se produzca 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 de elementos repetidos 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 Heap 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.

La compatibilidad de intervalos con tipos de datos, incluida la longitud máxima de la cadena, el recuento 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 de datos o el esquema 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 con recuento (WS_STRING) para que el cero no confunda 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 la serialización:

Las funciones siguientes se usan con la serialización:

Las estructuras siguientes se usan con la serialización: