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.

ThdK
la source

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");
}
Zebi
la source
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
}
Jon
la source
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
}
Richard Garside
la source
1
Vous devez l'utiliser dans un Taskavecasync
Si8