PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → JSONVersVariant : cas d'erreur
JSONVersVariant : cas d'erreur
Débuté par Christophe PRADEL, 21 mar. 2018 14:24 - 3 réponses
Posté le 21 mars 2018 - 14:24
Bonjour à toutes et tous

J'ai découvert avec bonheur l'utilisation très souple de VariantVersJSON et JSONVersVariant

Je rencontre cependant un problème et je sollicite vos bonnes idées pour le contourner.

Le contexte :

Je travaille avec une classe TMaClasse
- j'instancie un objet monObjet de type TMaclasse
- je l'alimente
- j'extrais sa version JSON par sChaine = VariantVersJSON(monObjet)
- je sauvegarde la chaîne en base de données

Puis, plus tard...
- je relis la chaîne sChaine depuis ma base de données
- je crée un objet monNouvelObjet de type TMaclasse
- je le charge avec monNouvelObjet = JSONVersVariant(sChaine)

Niquel, ça marche !

Le problème :

Il se trouve que la classe TMaClasse a évolué : elle contient un membre sNouveauMembre supplémentaire.
lorsque je tente le JSONVersVariant depuis la chaine vers la nouvcelle structure, j'ai une exception parceque la propriété sNouveauMembre est absente de la chaîne JSON !

Y aurait-il un moyen élégant de gérer ce type d'erreur ?

Je souhaiterais que mon objet s'alimente "au mieux" en fonction du contenu réel de la chaîne JSON, c'est à dire, dans mon cas, remplir tous les membres de mon objet sauf le membre sNouveauMembre

En espérant avoir été assez, clair, je suis tout ouïe de vos idées
Membre enregistré
256 messages
Popularité : +29 (29 votes)
Posté le 21 mars 2018 - 17:56
Bonjour

Vous pouvez utiliser les fonctions Sérialise et Désérialise avec l'option psdJSON.
Membre enregistré
136 messages
Popularité : +12 (14 votes)
Posté le 22 mars 2018 - 08:08
Merci Yann pour ta réponse.

En effet, avec Sérialise et Désérialise, ça marche !

En désérialisation,
- si des propriétés sérialisées n'existent pas dans l'objet cible, elles sont ignorées
- si des propriétés de l'objet n'existent pas dans la sérialisation, ces propriétés ne sont pas impactées.

Et plus d'erreur générée !

Cela rend bien sûr un peu obsolète l'utilisation de JSONVersVariant et VariantVersJSON, sauf si dans les prochaines versions, une option était ajoutée à ces fonctions pour permettre un traitement strict ou souple du principe sous-jacent de sérialisation/désérialisation.
Membre enregistré
136 messages
Popularité : +12 (14 votes)
Posté le 22 mars 2018 - 08:56
Petit complément :

En poussant mes tests, il s'avère que la fonction désérialise soit plus limitée que la fonction JSONVersVariant

Elle ne supporte notamment pas les éléments de type tableau associatif, ce qu permet VariantVersJSON et JSONVersVariant