Comment obtenir une chaîne json à partir de l'URL?


145

Je passe mon code XML au format JSON.

Mais je ne trouve pas comment obtenir une chaîne JSON à partir d'une URL donnée.

L'URL est quelque chose comme ceci: " https://api.facebook.com/method/fql.query?query=.....&format=json "

J'ai utilisé XDocuments avant, là je pourrais utiliser la méthode de chargement:

XDocument doc = XDocument.load("URL");

Quel est l'équivalent de cette méthode pour JSON? J'utilise JSON.NET.

Réponses:


270

Utilisez la WebClientclasse dans System.Net:

var json = new WebClient().DownloadString("url");

Gardez à l'esprit que WebClientc'est IDisposable, donc vous ajouteriez probablement une usinginstruction à ceci dans le code de production. Cela ressemblerait à:

using (WebClient wc = new WebClient())
{
   var json = wc.DownloadString("url");
}

8
Pourquoi ignorez-vous l'instruction using qui est utilisée dans la réponse de Jon?
Skuli

1
Cela n'a pas fonctionné pour moi jusqu'à ce que je mette var json = wc.DownloadString("url");en try-catchbloc!
Alex Jolig

J'ai trouvé l'erreur "HttpRequestException: Impossible d'attribuer l'adresse demandée" .. c'est l'URL: " localhost: 5200 / testapi / swagger / v1 / swagger.json , mais cela fonctionne avec l'URL: petstore.swagger.io/v2/swagger.json
Uthen

102

AFAIK JSON.Net ne fournit pas de fonctionnalité de lecture à partir d'une URL. Vous devez donc le faire en deux étapes:

using (var webClient = new System.Net.WebClient()) {
    var json = webClient.DownloadString(URL);
    // Now parse with JSON.Net
}

1
@jsmith: Ce n'était pas une suggestion ... l'OP l'a mentionné :)
Jon

Merci de m'avoir aidé, c'est étrange que je n'ai pas trouvé ça sur google, c'était vraiment une question basique, n'est-ce pas? J'ai maintenant une erreur comme: Impossible de désérialiser l'objet JSON dans le type «System.String». Je sais que c'est un attribut de ma classe qui n'est pas correctement déclaré, mais je ne peux tout simplement pas trouver lequel. Mais j'essaye toujours! :)
Jeudi

45

Si vous utilisez .NET 4.5 et que vous souhaitez utiliser async, vous pouvez utiliser HttpClientdans System.Net.Http:

using (var httpClient = new HttpClient())
{
    var json = await httpClient.GetStringAsync("url");

    // Now parse with JSON.Net
}

1
Vous devez l'utiliser dans un Taskavecasync
Si8
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.