PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Erreur avec la désérialisation JSON
Erreur avec la désérialisation JSON
Débuté par Jean Turcotte, 03 déc. 2024 16:47 - 5 réponses
Membre enregistré
1 223 messages
Posté le 03 décembre 2024 - 16:47
J'ai un tableau de structure sérialisé en JSON qui est transféré au mobile Android.
Voici mon code partiel;
SectionCritiqueDébut("UnEmploye")
sResultat est chaîne = WS_LogPUNCHVersMobile(sAPIKEY, UnEmploye.m_FldNoEmp, dhDateHeureMAJ)
SectionCritiqueFin("UnEmploye")

SI EstHEXA(sResultat) ALORS
jsonResultat = sResultat
SI JSONValide(jsonResultat) ALORS
Désérialise(tabLogPUNCH, bufTabLogPUNCH, psdJSON)
FIN

Mes 2 structures sont identiques. Lorsque j'exécure le code sur le mobile. JSONValide m'indique Vrai et il contient toutes les données mais lorsqu'il désérialise, il me donne une erreur de JSON invalide.

Des idées?

--
Jean Turcotte
WX 2024
Membre enregistré
1 223 messages
Posté le 03 décembre 2024 - 17:12
J'ai trouvé, j'ai oublié de transférer le résultat dans ma variable bufTabLogPUNCH, J'ai tout de meme perdu 2h avec ça...8)

--
Jean Turcotte
WX 2024
Membre enregistré
453 messages
Posté le 03 décembre 2024 - 17:16
Bonjour,

Il manque des morceaux à ce bout de code non ? Si non, d'où vient ce "bufTabLogPUNCH" qui n'est mentionné nulle part ? Que contient-il ?
Membre enregistré
1 223 messages
Posté le 03 décembre 2024 - 18:35
Le buffer contient un tableau de structure provenant de mon WebService

--
Jean Turcotte
WX 2024
Membre enregistré
139 messages
Posté le 03 décembre 2024 - 18:52
Bonjour

Je vois votre problème, vous voulez avoir un résultat sur la déserialisation en 'Json', j'ai une solution pour vous

1. Vous devrez créer une classe pour avoir un tableau de résultat
2. Vous devrez créer une gestion soit d'enregistrement | soit modification des informations dans la classe
3. Vous devrez sérialiser le tableau de classe
4. Enfin vous désérialiser le buffer, le buffer est un type variable

Voilà un code qui pourrait vous aidez

ClPersonnel est une Classe // EDD (12/24) : La classe du personnel
m_eIdentifiant is entier
m_sMatricule is string
m_sNom is string
FIN

LOCAL // EDD (12/24) : Evènement d'un bouton pour des enregistrements des personnels
bfBuffer is Buffer
tbPersonnel, tbDeserialise is tableau of ClPersonnel
eEntier is entier
eEntier = TableauAjoute(tbPersonnel) // EDD (12/24) : Enregistrement des informations dans une tableau de classe
tbPersonnel[eEntier].m_eIdentifiant = 1
tbPersonnel[eEntier].m_sMatricule = "1"
tbPersonnel[eEntier].m_sNom = "Niry"
eEntier = TableauAjoute(tbPersonnel)
tbPersonnel[eEntier].m_eIdentifiant = 2
tbPersonnel[eEntier].m_sMatricule = "2"
tbPersonnel[eEntier].m_sNom = "Aina"
eEntier = TableauAjoute(tbPersonnel)
tbPersonnel[eEntier].m_eIdentifiant = 3
tbPersonnel[eEntier].m_sMatricule = "3"
tbPersonnel[eEntier].m_sNom = "Eddy"
Sérialise(tbPersonnel, bfBuffer, psdJSON) // EDD (12/24) : Sérialisation d'un tableau de classe vers un buffer
Info(bfBuffer)
Désérialise(tbDeserialise, bfBuffer, psdJSON) // EDD (12/24) : Désérialisation d'un buffer vers un nouveau tableau de classe
FOR i = 1 _TO_ TableauOccurrence(tbDeserialise) // EDD (12/24) : Lecture des informations
Trace("Numéro " + i + " " + tbDeserialise[i].m_eIdentifiant + " " + tbDeserialise[i].m_sMatricule + " " + tbDeserialise[i].m_sNom)
END

NB : Utilisez toujours des classes dans un projet
NB : Je ne comprends pas votre codes c'est pourquoi je vous écrit un modèle identique dont vous pouvez utiliser

Cordialement
Mr.RATSIMANDRESY
Niry Aina Eddy
Membre enregistré
1 223 messages
Posté le 04 décembre 2024 - 00:10
Merci à Vous!

--
Jean Turcotte
WX 2024