|
|
|
|
|
- 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 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.
- 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.
MonTableau est un tableau de chaînes
bufRésultat est un Buffer
Ajoute(MonTableau, "WINDEV")
Ajoute(MonTableau, "WEBDEV")
Ajoute(MonTableau, "WINDEV MOBILE")
Sérialise(MonTableau, bufRésultat, psdJSON)
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 : | | psdBinaire | Sérialisation binaire.
| psdBinaireFormat16 | Sérialisation binaire au format compatible avec la version 16. Ce format doit être utilisé si une application en version 17 (ou supérieure) doit fournir des données à une application en version 16 ou inférieure. Ce format ne doit pas être utilisé en mode Unicode. | 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".
| psdMinifié | Attention : Cette constante doit être combinée à la constante psdJSON. Dans les autres cas, elle n'est pas prise en compte. 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, ...). | 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. | 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 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 structures ou de classes : 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 wd300xml.dll ou wp300xml.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. 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).
- 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]
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 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>] Exemple :
CTest est une Classe, sérialise = "Test" m_sNom est une chaîne, sérialise = "Nom" m_sPrenom est une chaîne, sérialise = "Prenom" m_sSuitePrenom est une chaîne, sérialise = "SuitePrenom" FIN  sXML est un Buffer monTest est un CTest monTest.m_sNom = "Mon Nom" monTest.m_sPrenom = "Mon Prénom" monTest.m_sSuitePrenom = "Mon Prénom Mon Prénom" Sérialise(monTest, sXML, psdXMLAgrégé)   // 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> 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 classes ou de structures 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.
- Piles, files, listes :
- La sérialisation JSON des piles, files, listes n'est pas possible.
- Il n'est pas possible de sérialiser/désérialiser des variables de type File, Pile ou Liste.
- Seule la sérialisation de type JSON est disponible pour les variables de type Enregistrement. Aucune désérialisation n'est disponible.
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…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|