PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEV, WEBDEV ET WINDEV MOBILE

  • Désérialisation
  • Changement de comportement en version 10 : génération d'une sérialisation XML pour les Mobiles
  • Rapidité
  • Sérialisation des membres de classes et de structures
  • Nom de sérialisation des classes
  • Limites
Produits
WinDevWebDev - Code ServeurWebDev - Code NavigateurWinDev MobileEtats et Requêtes
Plateformes
WindowsLinuxWindows MobileUniversal Windows 10 AppAndroidWidget AndroidiPhone/iPadApple Watch
Langages
JavaPHPAjaxCode Utilisateur (MCU)Langage Externe
Bases de données
HFSQLHFSQL Client/ServeurProcédures stockéesOLE DBODBCAccès Natifs
Sérialise (Fonction)
En anglais : Serialize

Transforme les éléments suivants dans un format spécifique :
  • une structure (et ses sous-éléments).
  • une classe (et ses sous-éléments).
  • un tableau (y compris les tableaux associatifs).
  • une file.
  • une pile.
  • une liste.
  • Versions 15 et supérieures
    une variable d'un type avancé (par exemple gglAgenda).
    Nouveauté 15
    une variable d'un type avancé (par exemple gglAgenda).
    une variable d'un type avancé (par exemple gglAgenda).
Les formats disponibles sont XML, binaire et JSON. Il sera ensuite possible de récupérer le format initial grâce à la fonction Désérialise.

Versions 15 et supérieures
Java Cette fonction est désormais disponible pour les applications Java.
PHP Cette fonction est désormais disponible pour les sites PHP.
Android Cette fonction est désormais disponible pour les applications Android.
Nouveauté 15
Java Cette fonction est désormais disponible pour les applications Java.
PHP Cette fonction est désormais disponible pour les sites PHP.
Android Cette fonction est désormais disponible pour les applications Android.
Java Cette fonction est désormais disponible pour les applications Java.
PHP Cette fonction est désormais disponible pour les sites PHP.
Android Cette fonction est désormais disponible pour les applications Android.
Versions 17 et supérieures
WinDev MobileiPhone/iPad Cette fonction est désormais disponible pour les applications iPhone/iPad.
Nouveauté 17
WinDev MobileiPhone/iPad Cette fonction est désormais disponible pour les applications iPhone/iPad.
WinDev MobileiPhone/iPad Cette fonction est désormais disponible pour les applications iPhone/iPad.
Versions 18 et supérieures
WinDev MobileWidget Android Cette fonction est désormais disponible en mode Widget Android.
WinDevWinDev MobileUniversal Windows 10 App Cette fonction est désormais disponible en mode Windows Store apps.
Nouveauté 18
WinDev MobileWidget Android Cette fonction est désormais disponible en mode Widget Android.
WinDevWinDev MobileUniversal Windows 10 App Cette fonction est désormais disponible en mode Windows Store apps.
WinDev MobileWidget Android Cette fonction est désormais disponible en mode Widget Android.
WinDevWinDev MobileUniversal Windows 10 App Cette fonction est désormais disponible en mode Windows Store apps.

Versions 21 et supérieures
WinDev MobileApple Watch Cette fonction est désormais disponible en mode Apple Watch.
WinDevWinDev MobileUniversal Windows 10 App Cette fonction est désormais disponible en mode Universal Windows 10 App.
Nouveauté 21
WinDev MobileApple Watch Cette fonction est désormais disponible en mode Apple Watch.
WinDevWinDev MobileUniversal Windows 10 App Cette fonction est désormais disponible en mode Universal Windows 10 App.
WinDev MobileApple Watch Cette fonction est désormais disponible en mode Apple Watch.
WinDevWinDev MobileUniversal Windows 10 App Cette fonction est désormais disponible en mode Universal Windows 10 App.
// Cet exemple montre l'utilisation des fonctions Sérialise/Désérialise
// avec une variable de type Tableau.
// Ces fonctions peuvent utiliser tous les types de variables WLangage.


MonTableau est un tableau de chaînes
bufRésultat est un Buffer

// Ajoute des éléments dans le tableau
Ajoute(MonTableau, "WINDEV")
Ajoute(MonTableau, "WEVDEV")
Ajoute(MonTableau, "WINDEV MOBILE")

// Sérialisation du tableau dans le buffer en JSON
// => Sauvegarde du tableau et de tout son contenu dans une chaîne JSON
Sérialise(MonTableau, bufRésultat, psdJSON)

// Désérialisation du buffer JSON
// => Reconstruction du tableau WLangage à partir de la chaîne JSON
MonTableauReconstruit est un tableau de chaînes
Désérialise(MonTableauReconstruit, bufRésultat, psdJSON)

Syntaxe
Sérialise(<Variable> , <Buffer> , <Paramètres> [, <Nom de la racine>])
<Variable> : Type de la variable
Variable à sérialiser. Cette variable est de type structure, classe, tableau, file, liste ou pile.
<Buffer> : Chaîne de caractères Ansi ou buffer
Variable qui contient le résultat de la sérialisation.
<Paramètres> : Constante de type Entier
Type de sérialisation :
psdBinaireSérialisation binaire.
AndroidWidget AndroidJavaPHP La désérialisation binaire n'est pas disponible.
Versions 17 et supérieures
psdBinaireFormat16
Nouveauté 17
psdBinaireFormat16
psdBinaireFormat16
Sérialisation binaire au format compatible 16.

Ce format doit être utilisé si une application en version 17 doit fournir des données à une application en version 16 ou inférieure.
Ce format ne doit pas être utilisé en mode Unicode.

AndroidWidget AndroidJavaPHP La désérialisation binaire n'est pas disponible.
Versions 19 et supérieures
psdJSON
Nouveauté 19
psdJSON
psdJSON
Sérialisation au format JSON.

AndroidWidget AndroidJava La désérialisation au format JSON n'est pas disponible.
JavaPHP La désérialisation au format JSON n'est pas disponible.
Versions 20 et supérieures
AndroidWidget Android La sérialisation au format JSON est désormais disponible.
Nouveauté 20
AndroidWidget Android La sérialisation au format JSON est désormais disponible.
AndroidWidget Android La sérialisation au format JSON est désormais disponible.
psdXMLSérialisation XML avec référence aux sous-objets. Ce type de sérialisation permet d'utiliser le format XML comme moyen de stockage et d'échange entre des applications écrites en WLangage.

Windows Mobile La sérialisation XML peut être effectuée uniquement dans une variable de type Buffer.
Versions 20 et supérieures
psdXMLAgrégé
Nouveauté 20
psdXMLAgrégé
psdXMLAgrégé
Sérialisation XML avec agrégation directe des sous-objets. Ce type de sérialisation permet de générer rapidement un fichier XML dans un format classique, utilisé pour des échanges avec d'autres systèmes.

Remarque : Une désérialisation en mode psdXMLAbrégé est disponible, cependant les éléments WLangage (variants, tableaux, classes dérivées, ...) ne seront pas les mêmes que ceux d'origine.

Windows Mobile La sérialisation XML peut être effectuée uniquement dans une variable de type Buffer.

AndroidWidget AndroidJavaPHP Ce mode de sérialisation n'est pas disponible.
<Nom de la racine> : Chaîne de caractères (avec guillemets)
Versions 20 et supérieures
Nom de la racine du XML généré. Ce paramètre est pris en compte uniquement en mode psdXMLAgrégé.
Si ce paramètre n'est pas précisé, le nom de la racine est "DOCUMENT".
Nouveauté 20
Nom de la racine du XML généré. Ce paramètre est pris en compte uniquement en mode psdXMLAgrégé.
Si ce paramètre n'est pas précisé, le nom de la racine est "DOCUMENT".
Nom de la racine du XML généré. Ce paramètre est pris en compte uniquement en mode psdXMLAgrégé.
Si ce paramètre n'est pas précisé, le nom de la racine est "DOCUMENT".

Remarques

Désérialisation

La désérialisation d'un tableau, d'une pile, d'une liste ou d'une file supprime le contenu de cet élément.

S'il y a des membres en plus dans la structure ou dans la classe :

  • si on désérialise une structure ou une classe : les membres supplémentaires conservent leurs valeurs d'avant la désérialisation.
  • si on désérialise un tableau de structure ou de classe : les membres supplémentaires prennent la valeur par défaut du type du membre.
S'il y a des membres en plus dans le buffer sérialisé, ils ne sont pas pris en compte lors de la désérialisation.

Pour désérialiser un tableau dynamique sans type, il est nécessaire d'allouer préalablement ce tableau.

Pour désérialiser une classe ou une structure contenant un tableau dynamique sans type, il est nécessaire d'allouer préalablement ce tableau.

La désérialisation XML nécessite la librairie wdxxxxml.dll ou wpxxxxml.dll.

AndroidWidget AndroidJava Pour que le format de sérialisation soit compatible entre des applications WINDEV et des applications WINDEV Java, les noms des éléments sérialisés suivants ne doivent pas contenir des caractères spéciaux ou des caractères accentués :
  • classes,
  • tableaux de classes,
  • structures,
  • tableau de structures.

Changement de comportement en version 10 : génération d'une sérialisation XML pour les Mobiles

Jusqu'à la version 100050, l'utilisation de la constante psdXML ne générait pas un fichier XML correct. Le format généré posait un problème essentiellement sur les postes Mobiles. Ce problème a été corrigé.

Un fichier XML créé avec une version supérieure à la version 100050 n'est pas lisible par un programme compilé avec une version antérieure. Pour conserver le fonctionnement de la version 100050, il suffit d'utiliser la constante psdXML_AncienFormat.

Rapidité

La sérialisation binaire est plus rapide que la sérialisation XML.
Versions 19 et supérieures

Sérialisation des membres de classes et de structures

Par défaut, tous les membres d'une classe ou d'une structure sont sérialisés.

Il est possible de gérer précisément la sérialisation de chaque membre :

  • en indiquant quel membre sera sérialisé lors de l'appel à la fonction Sérialise.
    Cette opération est possible sur tous les types de sérialisation (WXML, JSON, binaire).
  • en changeant le nom du membre lors de la sérialisation par la fonction Sérialise.
    Cette opération n'est pas possible lors d'une sérialisation binaire.
Cette gestion de la sérialisation est réalisée en utilisant la syntaxe suivante :

  • Sérialisation ou non d'un membre  :
    <Nom du membre> est un <Type du membre> [, Sérialise = <Vrai / Faux>] [, xmlAttribut]
  • Sérialisation et changement du nom d'un membre :
    <Nom du membre> est un <Type du membre> [, Sérialise = <Nouveau nom>] [, xmlAttribut]
Versions 20 et supérieures
L'attribut d'extension "xmlAttribut" permet d'indiquer que le membre est créé en tant qu'attribut (et non balise). Cet attribut est pris en compte uniquement lors d'une sérialisation de type psdXMLAgrégé.
Nouveauté 20
L'attribut d'extension "xmlAttribut" permet d'indiquer que le membre est créé en tant qu'attribut (et non balise). Cet attribut est pris en compte uniquement lors d'une sérialisation de type psdXMLAgrégé.
L'attribut d'extension "xmlAttribut" permet d'indiquer que le membre est créé en tant qu'attribut (et non balise). Cet attribut est pris en compte uniquement lors d'une sérialisation de type psdXMLAgrégé.

Exemple pour une classe :

Cl est une Classe
// Membre sérialisé
MembreSérialisé est un entier
// Membre non sérialisé
MembreNonSérialisé est une chaîne, Sérialise = Faux  
// Membre renommé lors de la sérialisation
MembreRenommé est un entier, Sérialise = "NouveauNomMembre"
FIN

Remarque : Pour ne pas sérialiser un membre de type tableau, il faut utiliser la syntaxe suivante :
t1 est un tableau <Sérialise = Faux> d'entier
t2 est un tableau <Sérialise = "<nom de sérialisation>"> d'entier
Nouveauté 19

Sérialisation des membres de classes et de structures

Par défaut, tous les membres d'une classe ou d'une structure sont sérialisés.

Il est possible de gérer précisément la sérialisation de chaque membre :

  • en indiquant quel membre sera sérialisé lors de l'appel à la fonction Sérialise.
    Cette opération est possible sur tous les types de sérialisation (WXML, JSON, binaire).
  • en changeant le nom du membre lors de la sérialisation par la fonction Sérialise.
    Cette opération n'est pas possible lors d'une sérialisation binaire.
Cette gestion de la sérialisation est réalisée en utilisant la syntaxe suivante :

  • Sérialisation ou non d'un membre  :
    <Nom du membre> est un <Type du membre> [, Sérialise = <Vrai / Faux>] [, xmlAttribut]
  • Sérialisation et changement du nom d'un membre :
    <Nom du membre> est un <Type du membre> [, Sérialise = <Nouveau nom>] [, xmlAttribut]
Versions 20 et supérieures
L'attribut d'extension "xmlAttribut" permet d'indiquer que le membre est créé en tant qu'attribut (et non balise). Cet attribut est pris en compte uniquement lors d'une sérialisation de type psdXMLAgrégé.
Nouveauté 20
L'attribut d'extension "xmlAttribut" permet d'indiquer que le membre est créé en tant qu'attribut (et non balise). Cet attribut est pris en compte uniquement lors d'une sérialisation de type psdXMLAgrégé.
L'attribut d'extension "xmlAttribut" permet d'indiquer que le membre est créé en tant qu'attribut (et non balise). Cet attribut est pris en compte uniquement lors d'une sérialisation de type psdXMLAgrégé.

Exemple pour une classe :

Cl est une Classe
// Membre sérialisé
MembreSérialisé est un entier
// Membre non sérialisé
MembreNonSérialisé est une chaîne, Sérialise = Faux  
// Membre renommé lors de la sérialisation
MembreRenommé est un entier, Sérialise = "NouveauNomMembre"
FIN

Remarque : Pour ne pas sérialiser un membre de type tableau, il faut utiliser la syntaxe suivante :
t1 est un tableau <Sérialise = Faux> d'entier
t2 est un tableau <Sérialise = "<nom de sérialisation>"> d'entier

Sérialisation des membres de classes et de structures

Par défaut, tous les membres d'une classe ou d'une structure sont sérialisés.

Il est possible de gérer précisément la sérialisation de chaque membre :

  • en indiquant quel membre sera sérialisé lors de l'appel à la fonction Sérialise.
    Cette opération est possible sur tous les types de sérialisation (WXML, JSON, binaire).
  • en changeant le nom du membre lors de la sérialisation par la fonction Sérialise.
    Cette opération n'est pas possible lors d'une sérialisation binaire.
Cette gestion de la sérialisation est réalisée en utilisant la syntaxe suivante :

  • Sérialisation ou non d'un membre  :
    <Nom du membre> est un <Type du membre> [, Sérialise = <Vrai / Faux>] [, xmlAttribut]
  • Sérialisation et changement du nom d'un membre :
    <Nom du membre> est un <Type du membre> [, Sérialise = <Nouveau nom>] [, xmlAttribut]
Versions 20 et supérieures
L'attribut d'extension "xmlAttribut" permet d'indiquer que le membre est créé en tant qu'attribut (et non balise). Cet attribut est pris en compte uniquement lors d'une sérialisation de type psdXMLAgrégé.
Nouveauté 20
L'attribut d'extension "xmlAttribut" permet d'indiquer que le membre est créé en tant qu'attribut (et non balise). Cet attribut est pris en compte uniquement lors d'une sérialisation de type psdXMLAgrégé.
L'attribut d'extension "xmlAttribut" permet d'indiquer que le membre est créé en tant qu'attribut (et non balise). Cet attribut est pris en compte uniquement lors d'une sérialisation de type psdXMLAgrégé.

Exemple pour une classe :

Cl est une Classe
// Membre sérialisé
MembreSérialisé est un entier
// Membre non sérialisé
MembreNonSérialisé est une chaîne, Sérialise = Faux  
// Membre renommé lors de la sérialisation
MembreRenommé est un entier, Sérialise = "NouveauNomMembre"
FIN

Remarque : Pour ne pas sérialiser un membre de type tableau, il faut utiliser la syntaxe suivante :
t1 est un tableau <Sérialise = Faux> d'entier
t2 est un tableau <Sérialise = "<nom de sérialisation>"> d'entier

Versions 20 et supérieures

Nom de sérialisation des classes

L'attribut d'extension "Sérialise" est disponible sur les classes pour indiquer le nom de sérialisation.

La syntaxe utilisée est la suivante :

<Nom de la classe> est une Classe [, Sérialise = <Nouveau nom>]
Nouveauté 20

Nom de sérialisation des classes

L'attribut d'extension "Sérialise" est disponible sur les classes pour indiquer le nom de sérialisation.

La syntaxe utilisée est la suivante :

<Nom de la classe> est une Classe [, Sérialise = <Nouveau nom>]

Nom de sérialisation des classes

L'attribut d'extension "Sérialise" est disponible sur les classes pour indiquer le nom de sérialisation.

La syntaxe utilisée est la suivante :

<Nom de la classe> est une Classe [, Sérialise = <Nouveau nom>]

Limites

  • Les tableaux fixes et les tableaux associatifs de structures locales ne peuvent pas être sérialisés.
  • Les membres globaux des classes ne sont pas sérialisés.
  • La sérialisation/désérialisation XML d'un tableau de structures avec un membre chaîne contenant un "\0" ou Caract(0) renvoie l'erreur "Format de sérialisation incorrect". Il est nécessaire de faire une sérialisation/désérialisation binaire dans ce cas.
  • Il n'est pas possible de sérialiser/désérialiser un tableau de classe ou de structure si cette classe ou cette structure contient un tableau dynamique sans type. Il est nécessaire d'utiliser un tableau dynamique typé dans cette classe ou cette structure.
  • Pour sérialiser/désérialiser une classe, il est nécessaire d'avoir un constructeur avec 0 paramètre.
  • Windows Mobile La sérialisation XML peut être effectuée uniquement dans une variable de type Buffer.
  • Versions 20 et supérieures
    Limites en mode psdXMLAgrégé : la sérialisation/désérialisation de variables de types avancés provoque une erreur à l'exécution. Les propriétés des variables de types avancés ne sont pas sérialisées.
    Nouveauté 20
    Limites en mode psdXMLAgrégé : la sérialisation/désérialisation de variables de types avancés provoque une erreur à l'exécution. Les propriétés des variables de types avancés ne sont pas sérialisées.
    Limites en mode psdXMLAgrégé : la sérialisation/désérialisation de variables de types avancés provoque une erreur à l'exécution. Les propriétés des variables de types avancés ne sont pas sérialisées.
  • AndroidWidget AndroidJava Il n'est pas possible de sérialiser/désérialiser des variables de type File, Pile ou Liste.

Liste des exemples associés :
Les fonctions Sérialise/Désérialise Exemples unitaires (WEBDEV) : Les fonctions Sérialise/Désérialise
[ + ] Utilisation des fonctions WLangage Sérialise et Désérialise.
La sérialisation consiste à sauvegarder une variable, un objet, une structure, un tableau ou tout autre élément dans un buffer.
Ce buffer peut ensuite être sauvegardé sur disque ou envoyé par socket. Cela permet la persistance des objets.
La fonction Désérialise permet de reconstruire un objet, un tableau ou une structure à partir d'un buffer.
Les fonctions Sérialise/Désérialise Exemples unitaires (WINDEV) : Les fonctions Sérialise/Désérialise
[ + ] Utilisation des fonctions WLangage Sérialise et Désérialise.
La sérialisation consiste à sauvegarder une variable, un objet, une structure, un tableau ou tout autre élément dans un buffer. Ce buffer peut être ensuite sauvegardé sur disque ou envoyé par socket. Cela permet la persistance des objets.
La fonction Désérialise permet de reconstruire un objet, un tableau ou une structure à partir d'un buffer.

Composantes
WinDevWebDev - Code ServeurEtats et Requêtes wd210vm.dll
Windows Mobile wp210vm.dll
Java wd210java.jar
Linux wd210vm.so
Android wd210android.jar
Version minimum requise
  • Version 10
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire