IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

JsonSerializer désérialize json en classe


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2014
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 322
    Par défaut JsonSerializer désérialize json en classe
    Bonjour,

    Je fais appel à une API Rest et je récupère du json en .Net Core 3.1.

    Je voudrais récupérer le résultat dans une classe mais ça ne fonctionne pas correctement.

    Voici un bout du JSON :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    {
        "response":
        {
            "error_message":"",
            "nb_items":250,
            "out_societ":
            {
                "OutListeSociet":
                [
                    {
                        "codeSociet":88593,
                        "nomSociet":"GED1",
                        "prenomSociet":""
                    },
                    {
                        "codeSociet":93127,
                        "nomSociet":"GED2",
                        "prenomSociet":""
                    },
    Et voici mes classes créées en conséquences :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    class ListeSociet
        {
            public string error_message;
            public int nb_items;
            public outSociet out_societ;
        }
     
        class outSociet
        {
            public List<outListeSociet> OutListeSociet;
        }
     
        class outListeSociet
        {
            public int codeSociet;
            public string nomSociet;
            public string prenomSociet;
        }
    En débug je vois que "out_societ" de ma classe ListeSociet est à null.

    Je ne sais pas comment résoudre ce problème. Je n'ai aucune erreur.

    Voici le code appelant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var resultat = JsonSerializer.Deserialize<ListeSociet>(result.Content.ReadAsStringAsync().Result);

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    Hello,

    tu peux utiliser les attributs pour spécifier le nom de la propriété dans le Json
    https://docs.microsoft.com/fr-fr/dot...xt-json-how-to

    Peut être que comme ça il arrivera à faire le lien

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2014
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 322
    Par défaut
    Malheureusement non, ça ne change rien.

    Je récupère bien le "error_message" ainsi que le "nb_items".

    Mais le "out_societ" reste égal à null....

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    Fait voir ton nouveau code ?

    En passant par un outil comme quicktype il me généère ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    namespace QuickType
    {
        using System;
        using System.Collections.Generic;
     
        using System.Globalization;
        using Newtonsoft.Json;
        using Newtonsoft.Json.Converters;
     
        public partial class Response
        {
            [JsonProperty("error_message")]
            public string ErrorMessage { get; set; }
     
            [JsonProperty("nb_items")]
            public long NbItems { get; set; }
     
            [JsonProperty("out_societ")]
            public OutSociet OutSociet { get; set; }
        }
     
        public partial class OutSociet
        {
            [JsonProperty("OutListeSociet")]
            public OutListeSociet[] OutListeSociet { get; set; }
        }
     
        public partial class OutListeSociet
        {
            [JsonProperty("codeSociet")]
            public long CodeSociet { get; set; }
     
            [JsonProperty("nomSociet")]
            public string NomSociet { get; set; }
     
            [JsonProperty("prenomSociet")]
            public string PrenomSociet { get; set; }
        }
    }
    Je ne sais pas si c'est newtonsoft ou text.json qui est utilisé sur net core 3.1

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2014
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 322
    Par défaut
    Je n'ai pas le code ici, je le mettrais demain une fois de retour au travail.

    J'utilise text.json avec .Net Core 3.1

    J'essayerai ta solution, si ça ne fonctionne toujours pas, j'essayerai avec Newtonsoft pour voir si ça passe.

  6. #6
    Membre très actif
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2014
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 322
    Par défaut
    Bonjour,

    Bon... j'ai du rêver hier, mais au final, je ne récupère rien du tout dans ma classe....

    Voici le nouveau code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    class Response
        {
            [JsonPropertyName("error_message")]
            public string error_message {get; set;}
            [JsonPropertyName("nb_items")]
            public int nb_items { get; set; }
            [JsonPropertyName("out_societ")]
            public outSociet out_societ { get; set; }
        }
     
        class outSociet
        {
            [JsonPropertyName("out_societ")]
            public List<outListeSociet> OutListeSociet { get; set; }
        }
     
        class outListeSociet
        {
            [JsonPropertyName("out_societ")]
            public int codeSociet { get; set; }
            [JsonPropertyName("out_societ")]
            public string nomSociet { get; set; }
            [JsonPropertyName("out_societ")]
            public string prenomSociet {get; set;}
        }
    Le problème semble différent de ce que je pensais.

    EDIT :

    J'ai l'impression que la méthode Deseralize de Text.Json ne fonctionne pas correctement, car quand j'essaye de deserialiser dans une classe complétement différentes, je n'ai aucune exception contrairement à ce qu'indique la doc...

    Voici le code testé sans exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    class Societ
        {
            public void getAll()
            {
                using (HttpClient client = new HttpClient())
                {
                    HttpResponseMessage result = client.GetAsync("************").Result;
                    string test = result.Content.ReadAsStringAsync().Result;
                    var resultat = JsonSerializer.Deserialize<Titi>(result.Content.ReadAsStringAsync().Result);
                }
            }
        }
     
        class Titi
        {
            public int rien;
        }
    EDIT 2 :

    Même avec Newtonsoft, la désérialisation ne fonctionne pas et sans exception...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    HttpResponseMessage result = client.GetAsync("**********").Result;
                    string test = result.Content.ReadAsStringAsync().Result;
                    //var resultat = JsonSerializer.Deserialize<response>(result.Content.ReadAsStringAsync().Result);
     
                    response resultat = JsonConvert.DeserializeObject<response>(test);
    Il y a quelque chose que je ne doit pas comprendre....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JSON] Générer clés valeurs de JSON vers Classe
    Par sinzen dans le forum Langages serveur
    Réponses: 10
    Dernier message: 08/12/2017, 11h00
  2. [Débutant] Accès champ JSON pour attribut classe Model
    Par zerguib dans le forum ASP.NET
    Réponses: 10
    Dernier message: 12/06/2013, 16h09
  3. JSON types et classes
    Par sekaijin dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 27/11/2010, 11h43
  4. generation de xml et json a partir de "class".
    Par wiztricks dans le forum Général Python
    Réponses: 0
    Dernier message: 22/06/2010, 20h46
  5. Classe personnalisée pour JSON
    Par Devil Shark dans le forum ActionScript 3
    Réponses: 5
    Dernier message: 14/01/2010, 11h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo