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 :

[DataContractJsonSerializer] Lire un objet désérialisé avec plusieurs attributs


Sujet :

C#

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Points : 4
    Points
    4
    Par défaut [DataContractJsonSerializer] Lire un objet désérialisé avec plusieurs attributs
    Salut tout le monde !

    Je voudrait désérialiser un objet JSON reçut de l'API d'Itunes.
    Voici la réponse que je reçoit : "Tous les albums du groupe Muse" :
    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
    {
       "resultCount":50,
       "results":[
          {
             "wrapperType":"collection",
             "collectionType":"Album",
             "artistId":1093360,
             "collectionId":326492721,
             "amgArtistId":142116,
             "amgVideoArtistId":null,
             "artistName":"Muse",
             "collectionName":"The Resistance",
             "collectionCensoredName":"The Resistance",
             "artistViewUrl":"http://itunes.apple.com/us/artist/muse/id1093360?uo=4",
             "collectionViewUrl":"http://itunes.apple.com/us/album/the-resistance/id326492721?uo=4",
             "artworkUrl60":"http://a3.mzstatic.com/us/r1000/007/Music/79/84/54/mzi.alpkhceo.60x60-50.jpg",
             "artworkUrl100":"http://a5.mzstatic.com/us/r1000/007/Music/79/84/54/mzi.alpkhceo.100x100-75.jpg",
             "collectionPrice":11.99,
             "collectionExplicitness":"notExplicit",
             "contentAdvisoryRating":null,
             "trackCount":12,
             "copyright":"2009 Warner Music UK Limited",
             "country":"USA",
             "currency":"USD",
             "releaseDate":"2009-09-11T07:00:00Z",
             "primaryGenreName":"Alternative"
          },
          {
             "wrapperType":"collection",
             "collectionType":"Album",
             ... etc.
    Si j'utilise ce contrat de données, pour ne récupérer que le nom des albums, cela marche très bien :
    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
    // Contrat de données :
        [DataContract]
        public class iTunesResult
        {
            [DataMember]
            public iTuneJsonResults[] results { get; set; }
        }
     
        [DataContract]
        public class iTuneJsonResults
        {
            [DataMember]
            public string collectionName { get; set; }
     
        }
     
    // Lecture des données désérialisées :
    iTunesResult resultat = JSONHelper.Deserialize<iTunesResult>(json);
    foreach (var item in resultat.results)
    {
            Console.WriteLine("collectionName: " + item.collectionName);
    }
    Mais si je souhaite récupérer plusieurs attribut de ma réponse JSON, la lecture des données plantes (erreur dans le foreach) :
    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
    // Contrat de données plus riche    
        [DataContract]
        public class iTunesResult
        {
            [DataMember]
            public int resultCount { get; set; }
            public iTuneJsonResults[] results { get; set; }
        }
     
        [DataContract]
        public class iTuneJsonResults
        {
            [DataMember]
            public string collectionName{ get; set; }
            public string trackCount{ get; set; }
     
        }
     
    // Lecture des données désérialisées avec plusieurs attributs: 
     iTunesResult resultat = JSONHelper.Deserialize<iTunesResult>(json);
    if (resultat.resultCount == 0)
    {
           Console.WriteLine("Aucun résulat");
    }
     else
    {
            Console.WriteLine("Nombre de résultat : " + resultat.resultCount);
            foreach (var item in resultat.results)
            {
                  Console.WriteLine("collectionName: " + item.collectionName);
                  Console.WriteLine("trackCount: " + item.trackCount);
             }
    }
    Est-ce que mon foreach ne peux s'appliquer que dans le cas ou il n'y à qu'un attribut dans ma classe iTuneJsonResults ?
    Quelqu'un voit-il ou est le problème ?

    Merci !

  2. #2
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bon bah finalement, c'est un ami qui m'a dépanné, il fallait déclaré les DataMember un par un pour chaque attribut comme ceci :

    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
        [DataContract]
        public class iTunesResult
        {
            [DataMember]
            public int resultCount { get; set; }
            [DataMember]
            public iTuneJsonResults[] results { get; set; }
        }
     
        [DataContract]
        public class iTuneJsonResults
        {
            [DataMember]
            public string collectionName{ get; set; }
            [DataMember]
            public string trackCount{ get; set; }
     
        }
    Comme ça, ça roule !

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

Discussions similaires

  1. Tableaux d'objets avec plusieurs attributs
    Par wafiwafi dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 20/08/2009, 15h02
  2. Génération xml avec plusieurs attributs sur la même ligne
    Par Eva01 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 05/12/2008, 14h49
  3. Réponses: 3
    Dernier message: 29/03/2007, 12h39
  4. method avec plusieurs attributs
    Par *alexandre* dans le forum JSF
    Réponses: 1
    Dernier message: 03/08/2006, 10h42
  5. Réponses: 3
    Dernier message: 19/11/2004, 21h48

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