AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

Este contenido se ha traducido automáticamente.  Haga clic aquí  para ver la versión en inglés.
Ayuda / WLanguage / Administrar bases de datos / HFSQL / Arquitectura de 3 niveles / Funciones WLanguage
  • Deserialización
  • Actualización de la versión 10: serialización XML para aplicaciones móviles
  • Velocidad
  • Serialización de los miembros de clases y estructuras
  • Nombre de serialización de las clases
  • Opciones disponibles para serializar arrays en XML
  • Limitaciones
WINDEV
WindowsLinuxJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadIOS WidgetApple WatchMac Catalyst
Otros
Procedimientos almacenados
Transforma los siguientes elementos en un formato específico:
  • una estructura (y sus subelementos).
  • una clase (y sus subelementos).
  • un array (incluidos los arrays asociativos).
  • una cola.
  • un apilamiento.
  • una lista.
  • un tipo avanzado de variable (gglCalendar por ejemplo).
Los formatos disponibles son XML, binario y JSON. A continuación, el formato inicial puede recuperarse mediante Deserializar.
Novedad versión 2025
WEBDEV - Código Navegador Ahora es posible serializar una cadena que contenga datos de una cola o apilamiento.
// This example explains how to use the Serialize/Deserialize functions
// with an Array variable. 
// These functions can use all types of WLanguage variables.

MyArray is array of strings
bufResult is Buffer

// Adds elements into the array
Add(MyArray, "WINDEV")
Add(MyArray, "WEBDEV")
Add(MyArray, "WINDEV MOBILE")

// Serialize the array in the buffer in JSON
// => Save the array and its entire content in a JSON string
Serialize(MyArray, bufResult, psdJSON)

// Deserialize the JSON buffer
// => Rebuild the WLanguage array from the JSON string
MyRebuiltArray is array of strings
Deserialize(MyRebuiltArray, bufResult, psdJSON)
Sintaxis
Serialize(<Variable> , <Buffer> , <Parameters> [, <Root name>])
<Variable>: Tipo de variable
Variable a serializar. Esta variable es una estructura, una clase, un array, una cola, una lista o un apilamiento.
<Buffer>: Cadena de caracteres Ansi o buffer
Variable que contiene el resultado de la serialización.
WEBDEV - Código Navegador Sólo están disponibles las variables de cadena de caracteres.
<Parameters>: Constante de tipo Integer
Tipo de serialización:
psdBinarySerialización binaria.
New in SaaS
Ahora es posible serializar una variable miembro o JSON en formato binario..
Nota: Esta funcionalidad solo está disponible a partir de WINDEV Suite SaaS 2025 - Update 2.
Para obtener más información, consulte Utilizar las novedades exclusivas de WINDEV Suite SaaS 2025.
WEBDEV - Código NavegadorAndroidWidget Android JavaPHP La deserialización binaria no está disponible.
psdBinaryFormat16Serialización binaria compatible con la versión 16.
Este formato debe utilizarse si una aplicación de la versión 17 o posterior debe compartir datos con una aplicación de la versión 16 o anterior.
Este formato no debe utilizarse en modo Unicode.
WEBDEV - Código NavegadorAndroidWidget Android JavaPHP La deserialización binaria no está disponible.
psdJSONSerialización JSON.
La codificación utilizada corresponde al estándar JSON:
  • Codificación ASCII de 7 bits, es decir, los 128 primeros caracteres sin acento,
  • Codificación JSON para otros caracteres: "\u" seguido del código del carácter en formato hexadecimal de 4 bytes. Por ejemplo, el carácter "é" (código ASCII 233, código hexadecimal E9) se codificaría como "\u00E9".
Java La deserialización JSON no está disponible.
psdMinifiedNota: Esta constante debe utilizarse en combinación con la constante psdJSON constante. En caso contrario, se ignorará.
La codificación utilizada corresponde al estándar JSON. Esta constante se utiliza para generar un JSON eliminando los espacios innecesarios (retornos de carro, caracteres de espaciado, etc.).
WEBDEV - Código NavegadorApple WatchJavaPHP Esta constante no está disponible.

psdFormattingSerialización en formato JSON o XML con retorno de carro y sangría.
La codificación utilizada corresponde al estándar JSON o XML.
Nota: Esta constante debe utilizarse en combinación con el método psdJSON o psdXML constante.
WEBDEV - Código NavegadorApple WatchJavaPHP La serialización en formato JSON con formato no está disponible.
psdXMLSerialización XML con referencia a subobjetos. Este tipo de serialización permite utilizar el formato XML como medio de almacenamiento e intercambio entre aplicaciones escritas en WLanguage.
WEBDEV - Código Navegador La serialización en formato XML no está disponible.
psdXMLAggregatedSerialización XML con agregación directa de subobjetos. Este tipo de serialización permite generar fácilmente un archivo XML en un formato estándar para realizar intercambios con otros sistemas.
Nota psdXMLAggregated está disponible. Sin embargo, los elementos WLanguage (variantes, arrays, clases derivadas, etc.) serán diferentes de los elementos originales.
WEBDEV - Código NavegadorAndroidWidget Android JavaPHP Este modo de serialización no está disponible.
Novedad versión 2025
psdXMLArrayRepeatedElements
Modo de serialización XML para manejar arrays como una secuencia de elementos.
Nota: Esta constante debe utilizarse en combinación con el parámetro psdXMLAggregated constante. Para más detalles, consulte el ejemplos de serialización de array.
WEBDEV - Código NavegadorAndroidWidget Android JavaPHP Este modo de serialización no está disponible.
Nota: Esta constante solo está disponible a partir de la versión 2025 - Update 1.
<Root name>: Cadena de caracteres
Nombre de la raíz del XML generado. Este parámetro se tiene en cuenta en psdXMLAggregated únicamente.
Si no se especifica este parámetro, el nombre de la raíz es "DOCUMENTO".
WEBDEV - Código Navegador Este parámetro no está disponible.
Observaciones

Deserialización

La deserialización de un array, cola, lista o apilamiento borra el contenido de este elemento.
Si hay miembros adicionales en la estructura o en la clase:
  • si se deserializa una estructura o una clase, los miembros adicionales conservan sus valores de antes de la deserialización.
  • si se deserializa un array de estructuras o clases, los miembros adicionales toman el valor por defecto del tipo de miembro.
Si hay miembros adicionales en el buffer serializado, se ignoran durante la deserialización.
Para deserializar un array dinámico no tipado, es necesario asignarlo previamente.
Para deserializar una clase o una estructura que contenga un array dinámico no tipado, es necesario asignar previamente este array.
La biblioteca wd300xml.dll o wp300xml.dll es necesaria para deserializar un documento XML.
AndroidWidget Android Java Para que el formato de serialización sea compatible entre las aplicaciones WINDEV y las aplicaciones WINDEV Java, los nombres de los siguientes elementos serializados no deben contener ningún carácter especial ni acentuado:
  • clases,
  • arrays de clases,
  • estructuras,
  • arrays de estructuras.
AndroidWidget Android No se admite la serialización/deserialización XML de variables Variant.
WEBDEV - Código Navegador Los nombres de los siguientes elementos serializados no deben contener caracteres especiales o acentuados:
  • clases,
  • arrays de clases,
  • estructuras,
  • arrays de estructuras.

Actualización de la versión 10: serialización XML para aplicaciones móviles

Hasta la versión 100050, el psdXML no generaba un archivo XML válido. El formato generado produjo problemas en los dispositivos móviles. Este problema fue solucionado.
Un archivo XML creado con una versión posterior a la versión 100050 no puede ser leído por un programa compilado con una versión anterior. Para conservar el modo de funcionamiento de la versión 100050, solo debe utilizar la constante psdXML_OldFormat.

Velocidad

La serialización binaria es más rápida que la serialización XML.

Serialización de los miembros de clases y estructuras

Por defecto, todos los miembros de una clase o estructura se serializan.
Tiene la posibilidad de gestionar con precisión la serialización de cada miembro:
  • indicando el miembro que se serializará al llamar a la función Serializar.
    Esta operación se puede realizar en todos los tipos de serialización (XML, JSON, binario).
    WEBDEV - Código NavegadorPHP Funcionalidad no disponible.
  • cambiando el nombre del miembro durante la serialización con Serializar.
    Esta operación sólo puede realizarse durante una serialización binaria.
    WEBDEV - Código NavegadorPHP Funcionalidad no disponible.
Esta gestión de la serialización se realiza mediante la siguiente sintaxis:
  • Serialización (o no) de un miembro:
    <Member name> is <Member type> [, Serialize = <True/False>] [, xmlAttribute]
  • Serialización y cambio de nombre de miembro:
    <Member name> is <Member type> [, Serialize = <New name>] [, xmlAttribute]
El atributo de extensión "xmlAttribute" se utiliza para especificar que el miembro se crea como atributo (en lugar de etiqueta). Este atributo se tiene en cuenta durante un psdXMLAggregated únicamente.
WEBDEV - Código NavegadorAndroidWidget Android JavaPHP El atributo de extensión "xmlAttribute" no está disponible.
Ejemplo para una clase:
Cl is Class
	// Membre sérialisé
	MembreSérialisé is int 
	// Membre non sérialisé
	MembreNonSérialisé is string, serialize = false  
	// Membre renommé lors de la sérialisation
	MembreRenommé is int, serialize = "NouveauNomMembre" 
END
Nota: Para evitar serializar un miembro de un array, utilice la siguiente sintaxis:
t is array <Serialize = False> of int
t2 is array <Serialize = "<serialization name>"> of int

Nombre de serialización de las clases

El atributo de extensión "Serialize" está disponible para las clases con el fin de especificar el nombre de serialización.
Se utiliza la siguiente sintaxis:
<Class name> is Class [, Serialize = <New name>]
WEBDEV - Código NavegadorPHP Funcionalidad no disponible.
Ejemplo:
CTest is Class, serialize = "Test"
	m_sNom is string, serialize = "Nom"
	m_sPrenom is string, serialize = "Prenom"
	m_sSuitePrenom is string, serialize = "SuitePrenom"
END

sXML is Buffer
 monTest is CTest
 monTest.m_sNom = "Mon Nom"
 monTest.m_sPrenom = "Mon Prénom"
 monTest.m_sSuitePrenom = "Mon Prénom Mon Prénom"
Serialize(monTest, sXML, psdXMLAggregated)


// Contenu de sXML où l'on retrouve bien les noms de la sérialisation :
// <?xml version="1.0" encoding="UTF-8"?>
// <Test>
//  <Nom>Mon Nom</Nom>
//  <Prenom>Mon Prénom</Prenom>
//  <SuitePrenom>Mon Prénom Mon Prénom</SuitePrenom>
// </Test>

Opciones disponibles para serializar arrays en XML

  • Declara el array:
    LaStructure is Structure
    	LeTableau is array of int
    END
    
    la_variable is LaStructure
    la_variable.LeTableau = [1, 2, 3]
  • Serialización con psdXML constante:
    Serialize(la_variable, le_XML, psdXML)
    Resultado:
    <?xml version="1.0"?>
    <DOCUMENT xmlns:SOAP_ENC="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <TheStructure id="id0">
    <TheArray SOAP_ENC:arrayType="TheArray[3]">
    <item>1</item>
    <item>2</item>
    <item>3</item>
    </TheArray>
    </TheStructure>
    </DOCUMENT>
  • Serialización con psdXMLAggregated constante:
    Serialize(la_variable, le_XML_agrégé, psdXMLAggregated)
    Resultado:
    <?xml version="1.0"?>
    <TheStructure>
    <TheArray>
    <item>1</item>
    <item>2</item>
    <item>3</item>
    </TheArray>
    </TheStructure>
  • Novedad versión 2025
    Serialización con psdXMLAggrated y psdXMLArrayRepeatedElements constantes:
    Serialize(la_variable, le_XML_avec_éléments_tableau_répétés, 
    psdXMLAggregated + psdXMLArrayRepeatedElements)
    Resultado:
    <?xml version="1.0"?>
    <TheStructure>
    <TheArray>1</TheArray>
    <TheArray>2</TheArray>
    <TheArray>3</TheArray>
    </TheStructure>
    Nota: Esta sintaxis solo está disponible a partir de la versión 2025 - Update 1.

Limitaciones

  • Los arrays fijos y asociativos de estructuras locales no pueden serializarse.
  • Los miembros globales de las clases no se serializan.
  • La serialización/deserialización XML de un array de estructuras con un miembro cadena que contiene "\0" o Charact(0) devuelve el siguiente error: "Formato de serialización incorrecto". En este caso, debe realizarse una serialización/deserialización binaria.
  • No se puede serializar/deserializar un array de clases o estructuras si esta clase o estructura contiene un array dinámico sin tipo. En esta clase o en esta estructura debe utilizarse un array dinámico de tipo definido.
  • Para serializar/deserializar una clase, debe tener un constructor con 0 parámetro.
  • apilamientos, colas, listas:
    • La serialización JSON de apilamientos, colas y listas no está disponible.
    • AndroidWidget Android Java No se pueden serializar/deserializar variables de cola, apilamiento o lista.
    • WEBDEV - Código Navegador No se pueden serializar/deserializar variables de Lista.
  • Sólo está disponible la serialización JSON para las variables Registro. No es posible la deserialización.
Clasificación Lógica de negocio / UI: Código neutro
Componente: wd300vm.dll
Versión mínima requerida
  • Versión 10
Esta página también está disponible para…
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 07/05/2025

Señalar un error o enviar una sugerencia | Ayuda local