|
- 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
Sérialise (Fonction) En anglais : Serialize
// 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. Versions 22 et supérieures Nouveauté 22 <Paramètres> : Constante de type Entier Type de sérialisation : | | psdBinaire | Sérialisation binaire.
| Versions 17 et supérieurespsdBinaireFormat16 Nouveauté 17psdBinaireFormat16 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. | Versions 19 et supérieurespsdJSON Nouveauté 19psdJSON psdJSON | Sérialisation au format JSON. L'encodage utilisé correspond au standard JSON : - l'utilisation d'un encodage en ASCII 7 bits, soit les 128 premiers caractères, les caractères non accentués,
- l'utilisation d'un encodage JSON des autres caractères : "\u" suivi du code du caractère en hexadécimal sur 4. Exemple : pour "é" (code ASCII 233, code hexadécimal E9), l'encodage correspond à "\u00E9".
| Versions 24 et supérieurespsdMinifié Nouveauté 24psdMinifié psdMinifié | Sérialisation au format JSON. L'encodage utilisé correspond au standard JSON. Cette constante permet de générer un JSON en supprimant les espaces inutiles (retours à la ligne, caractères d'espacement, ...). | Versions 22 et supérieurespsdMiseEnForme Nouveauté 22psdMiseEnForme psdMiseEnForme | Sérialisation au format JSON ou XML avec retours à la ligne et indentation. L'encodage utilisé correspond au standard JSON ou XML. Attention : Cette constante doit être combinée avec la constante psdJSON ou psdXML. | psdXML | Sé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. | Versions 20 et supérieurespsdXMLAgrégé Nouveauté 20psdXMLAgré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. |
<Nom de la racine> : Chaîne de caractères (avec guillemets) Versions 20 et supérieuresNom 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é 20Nom 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. 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érieuresSé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 (XML, JSON, binaire).
 Fonctionnalité non disponible. - 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.
 Fonctionnalité non disponible.
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érieuresL'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é 20L'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é 19Sé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 (XML, JSON, binaire).
 Fonctionnalité non disponible. - 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.
 Fonctionnalité non disponible.
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érieuresL'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é 20L'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 (XML, JSON, binaire).
 Fonctionnalité non disponible. - 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.
 Fonctionnalité non disponible.
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érieuresL'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é 20L'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érieuresNom 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é 20Nom 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>]
Liste des exemples associés :
|
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.
|
|
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.
|
Classification Métier / UI : Code neutre
Documentation également disponible pour…
|
|
|
| |
| Erreur passage en WINDEV 23 |
|
| Depuis que nous sommes passé en WINDEV 23 nos webservices ne sérialise plus comme avant.
Exemple : Un tableau de chaines sérialisé dans un buffer en xml. Le buffer n'est pas fini. Il manque les dernières données du tableau ainsi que les balises XML de cloture...
Du coup plusieurs de nos webservices ne répondent plus à ce jour. Nous devons supprimer la sérialisation et modifier nos outils pour passer des chaines simples ou cryptés plutôt que des tableaux ou des structures sérialisés..
Avez vous déjà eu ce bug ?
cf forum : https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev.old/26239-wd23-bug-quand-serialise-xml/read.awp |
|
|
|
| |
| |
| |
| |
| |
| |
| | |
| |