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 :

Utilisation JSON avec C#


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Janvier 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2015
    Messages : 11
    Points : 11
    Points
    11
    Par défaut Utilisation JSON avec C#
    Bonjour à toutes et à tous,

    Voici ma problématique :

    Je récupère un fichier JSON depuis une API.

    Voici une partie du fichier récupéré :

    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
     
    {
        "entities": {
            "companies": {
                "9d1f64ff-0063-4a88-a82e-707e9a76eec5": {
                    "id": "9d1f64ff-0063-4a88-a82e-707e9a76eec5",
                    "name": "NetDevices",
                    "activated": true,
                    "cb_plan_id": null,
                    "cb_subscription_id": "2rprAVa9Q1VZVS61fU7",
                    "cb_card_status": false,
                    "cb_trial_end": null,
                    "cb_max_price": null,
                    "createdAt": null,
                    "updatedAt": null
                }
            }
    }
    Je n'arrive pas à comprendre comment je peux utiliser ce fichier. En effet, j'ai bien compris qu'il y a une classe entities, une classe companies mais je ne sais pas aller plus loin.

    Pourriez-vous m'éclaircir sur la façon dont je pourrais travailler ce fichier ?
    Surtout sur la partie "9d1f64ff-0063-4a88-a82e-707e9a76eec5" que je ne sais pas comment exploiter.

    Merci d'avance pour vos retour,

    Moussawi,

  2. #2
    Membre éprouvé Avatar de Momoth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 318
    Points : 1 236
    Points
    1 236
    Par défaut
    Salut,

    Comme je comprends ton fichier, tu as une entité qui se compose d'une liste de société. C'est un vieux formalisme pas trop utilisé mais en gros, le GUID "9d1f64ff-0063-4a88-a82e-707e9a76eec5" est une clé qui permet d'identifier la société parmi les autres. On utilise ce GUID comme propriété "portante" en gros. J'aime pas trop cette norme mais bon ...

    A minima la seule chose que tu as besoin est d'une classe Company avec les propriétés suivante :

    - Id : string
    - Name : string
    - Activated : bool
    - CbPlanId : object
    - CbSubscriptionId : string
    - CbCardStatus : bool
    - CbTrialEnd : object
    - CbMaxPrice : object (surement un decimal)
    - CreateAt : object (surement un DateTime)
    - UpdateAt : object (surement un DateTime)

    Bon après, le nommage tu fais comme tu le sens, faut juste que tu fasse la correspondance entre les propriétés C# et JSon lors de la déserialization.

    D'ailleurs en parlant de deserialization, c'est la prochaine étape. Tu vas transformer ton fichier JSon en C# (jete un oeil vers l'excellent package Nuget de Newtonsoft).

    Tu peux ignorer le GUID en en-tête, tu le retrouve dans la propriété Id. Résonne plutôt que chaque itérance dans "companies" est un objet avec ses propriétés.
    La Triforce du développement : Fainéantise, Curiosité et Imagination.

  3. #3
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Citation Envoyé par moussawi27
    En effet, j'ai bien compris qu'il y a une classe entities, une classe companies mais je ne sais pas aller plus loin.
    Je vois que tu cherches à utiliser le mécanisme standard de sérialisation/dé-sérialisation.
    Mais tu ne pourras pas faire coïncider une classe avec une entité puisqu'un guid ne peut pas être un nom valide pour une classe.

    Citation Envoyé par moussawi27
    Voici une partie du fichier récupéré
    Une partie ?
    C'est à dire que tu l'as transformé ?
    Les noms "entities" et "companies" laissent à penser qu'il s'agit d'une collection de "entity" et d'une collection de "company" mais ce n'est pas le cas dans ce que tu montres.

    La sérialisation de propriété "portante" comme les appellent Momoth n'est pas quelque chose de naturel car tu dois soit coder un mécanisme spécifique pour en tenir compte, soit dé-sérialiser à la main.
    Si jamais, tu l'as transformé avait-tu quelque chose ressemblant à ceci au départ ?
    Code JSON : 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
    {
        "entities": [
    		{
    			"companies": [
    				{
    					"id": "9d1f64ff-0063-4a88-a82e-707e9a76eec5",
    					"name": "NetDevices",
    					"activated": true,
    					"cb_plan_id": null,
    					"cb_subscription_id": "2rprAVa9Q1VZVS61fU7",
    					"cb_card_status": false,
    					"cb_trial_end": null,
    					"cb_max_price": null,
    					"createdAt": null,
    					"updatedAt": null
    				}
    			]
    		}
    	]
    }


    Sinon le plus simple serait de consulter la documentation de l'API ou directement le concepteur.

    Au passage ce site pourrait t'être utile :
    http://json2csharp.com/

  4. #4
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 898
    Points : 1 915
    Points
    1 915
    Par défaut
    Citation Envoyé par popo Voir le message
    Mais tu ne pourras pas faire coïncider une classe avec une entité puisqu'un guid ne peut pas être un nom valide pour une classe.
    Citation Envoyé par popo Voir le message
    La sérialisation de propriété "portante" comme les appellent Momoth n'est pas quelque chose de naturel car tu dois soit coder un mécanisme spécifique pour en tenir compte, soit dé-sérialiser à la main.
    Je pense qu'il doit être possible de mapper un objet collection avec des propriétés portantes ("companies" et ses guid) vers un Dictionary<Guid, Company>.

    Il existe aussi le logiciel NSwag Studio qui permet de générer un client d'API à partir de sa description, en principe un fichier de type swagger.json. Mais bah par contre le code auto-généré...

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Janvier 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2015
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    @momoth : Merci pour tes explications qui m'ont permit de comprendre un peu mieux la chose. N'aillant jamais utilisé ni API ni JSON, ça peut être un peu compliquer à utiliser. J'ai donc récupéré le fichier au format nested que j'ai pu dé-sérialisé très facilement.

    @popo : J'avais de gros problème avec ces GUID, mais ils disparaissent en utilisant le format nested fournit par l'API. Pour ce qui est de la partie du fichier, je ne l'ia pas modifié mais je l'ai raccourcis. Et j'avais en effet utilisé le site que tu m'as fournis pour convertir JSON en CSHARP.

    @Noxen : Merci pour le logiciel, mais j'aime bien comprendre ce que je fait et c'est vrai que le code auto-généré en général c'est incompréhensible.

    Ayant résolu ma demande, comme je l'ai dit via un fichier "nested" ainsi que le site http://json2csharp.com/ et le package Newtonsoft, je passe ma demande en résolu et remercie vos retours.

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

Discussions similaires

  1. [HighCharts] Utiliser JSON avec HighCharts and AJAX
    Par Geo-x dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 11/05/2015, 00h03
  2. [AJAX] coomment utiliser Json avec Ajax
    Par Xeuch dans le forum AJAX
    Réponses: 1
    Dernier message: 11/04/2013, 15h39
  3. Réponses: 5
    Dernier message: 18/06/2010, 18h12
  4. Réponses: 0
    Dernier message: 23/05/2010, 17h09

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