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

Framework .NET Discussion :

NewtonSoft Json - Question prise en charge URI


Sujet :

Framework .NET

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 189
    Points : 68
    Points
    68
    Par défaut NewtonSoft Json - Question prise en charge URI
    Bonjour à tous ,

    Je suis entre un d'essayer le package NewtonSoft Json et j'aurai voulu savoir si il était possible de prendre en charge la gestion d'URI car dans l'état actuel Visual Studio m'indique que la gestion d'URI n'est pas pris en charge donc je voulais savoir si s'était possible de mettre place ou si il faut mettre en place un système qui récupère le fichier json à jour sur le net puis le stocker dans mon projet ?

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        using (StreamReader r = new StreamReader("http://www.prevision-meteo.ch/services/json/paris"))
                {
                    string json = r.ReadToEnd();
                    dynamic array = JsonConvert.DeserializeObject(json);
                    //int i = 0;
                    var item = array[0];
                    Console.WriteLine(item.name);
     
    }

    Merci et bonne journée

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    StreamReader ne sait pas lire une resource HTTP.
    Il faut passer par une WebRequest (ou HttpWebRequest), ex. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    using (StreamReader rdr = new StreamReader(WebRequest.Create("http://www.prevision-meteo.ch/services/json/paris")
    						     .GetResponse()
    						     .GetResponseStream())) {
    	string line = "";
    	while ((line = rdr.ReadLine()) != null)
    		MessageBox.Show(line);
    }
    Je suis pas sûr que ce code soit bien propre au niveau des dispose, mais l'idée est là.

    Bon dev.
    Plus je connais de langages, plus j'aime le C.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 189
    Points : 68
    Points
    68
    Par défaut
    Merci , en tout cas cela fonctionne après c'est juste pour m’entraîner à manipuler les fichiers JSON peut être que cela n'est pas la façon la plus propre de le faire mais tant que cela permet de faire ce que j'ai à faire ça me va après peut être que quelqu'un d'autre va apporter sa suggestion si il y'a une façon de mieux faire .

  4. #4
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Les WebRequest ce n'est pas sale

    C'est juste qu'il me semble qu'une WebResponse doit être close (du moins elle a une fonction Close()), et je ne sais pas si le using va faire le taff ici. Il faudrait peut-être utiliser des objets intermédiaires pour s'assurer que tout est proprement fermé/libéré.
    Plus je connais de langages, plus j'aime le C.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 189
    Points : 68
    Points
    68
    Par défaut
    Ok , d'accord ^^

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par jopopmk Voir le message
    [...]et je ne sais pas si le using va faire le taff ici. Il faudrait peut-être utiliser des objets intermédiaires pour s'assurer que tout est proprement fermé/libéré.
    Dans le .NET Framework a chaque fois qu'une classe implemente IDisposable, tu peux etre certain que ca fait le job ! Apres, dans les classes de projets en entreprise, il vaut mieux verifier car l'erreur est humaine...
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 189
    Points : 68
    Points
    68
    Par défaut
    J'ai à nouveau un problème concernant la récupération des données du fichier JSON venant du web , il me sort l'erreur suivante :

    Une exception non gérée du type 'System.ArgumentException' s'est produite dans Newtonsoft.Json.dll

    Informations supplémentaires : Accessed JObject values with invalid key value: 0. Object property name expected.


    Alors que quand j'affiche la chaine json2 les données sont bien récupérées .

    Mon 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
     
    using (StreamReader r = new StreamReader("generated.json"))
                {
                    string json = r.ReadToEnd();
                    dynamic array = JsonConvert.DeserializeObject(json);
                    int i = 0;
                    var item = array[i];
     
                    for ( i ; i < array.Count; i++) {
     
                         item = array[i];
                        Console.WriteLine(item.friends[0].name);
     
                    }
                }
     
                // avec prise en charge d'un URI
                using (StreamReader rdr = new StreamReader(WebRequest.Create("http://www.prevision-meteo.ch/services/json/paris")
                                 .GetResponse()
                                 .GetResponseStream()))
                {
                    string json2 = rdr.ReadToEnd();
                    Console.WriteLine(json2.ToString());
                    dynamic array1 = JsonConvert.DeserializeObject(json2);
                    int j = 0;
                    var item = array1[j];
     
                    for (j = 0  ; j < array1.Count; j++)
                    {
     
                        item = array1[j];
                        Console.WriteLine(item.country);
     
                    }

    C'est exactement le même code après je pense que l'erreur vient du fait que les objets ne sont pas stockés dans un tableau comme dans le 1er fichier JSON et il faut surement utiliser une autre maniére pour parcourir les données mais je sais pas trop comment m'y prendre . Voici 2 screen des 2 fichiers correspondant à l'ordre du code .

    Nom : Capture 1.PNG
Affichages : 238
Taille : 33,2 KoNom : Capture2.PNG
Affichages : 213
Taille : 31,7 Ko

    Auriez-vous une idée pour comment rectifier cela ?

    Mercu

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 189
    Points : 68
    Points
    68
    Par défaut
    Résolu .

    Correction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    using (StreamReader rdr = new StreamReader(WebRequest.Create("http://www.prevision-meteo.ch/services/json/paris")
                                 .GetResponse()
                                 .GetResponseStream()))
                {
                    string json2 = rdr.ReadToEnd();
                    Console.WriteLine(json2.ToString());
                    dynamic array1 = JsonConvert.DeserializeObject<dynamic>(json2);
     
                    var item = array1.city_info;
     
                    Console.WriteLine(item.country);
                }
    Je ne savais pas mais avec le deuxième fichier JSON cela correspond à un dictionnaire .

    Source de correction pour les personnes qui peuvent etre intéressé : http://stackoverflow.com/questions/4...-to-json-maybe (solution ou il y'a 142 votes)

    Merci pour votre aide.

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

Discussions similaires

  1. Erreur 3251 : mise à jour non prise en charge
    Par gletare dans le forum Access
    Réponses: 2
    Dernier message: 10/02/2006, 10h17
  2. [VB.Net] Prise en charge de <summary> sous VS2003
    Par tomnie dans le forum Windows Forms
    Réponses: 4
    Dernier message: 16/12/2005, 12h01
  3. Réponses: 2
    Dernier message: 12/05/2005, 10h10
  4. Prise en charge multilingue sur le portal
    Par nic211 dans le forum Oracle
    Réponses: 4
    Dernier message: 07/07/2004, 14h43
  5. [SQL Serveur] prise en charge de l'arabe
    Par lamiae18 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/03/2004, 12h33

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