Jak uzyskać ciąg json z adresu URL?

145

Przełączam kod XML z formatu XML na JSON.

Ale nie mogę znaleźć sposobu na pobranie ciągu JSON z podanego adresu URL.

Adres URL wygląda mniej więcej tak: „ https://api.facebook.com/method/fql.query?query=.....&format=json

Wcześniej korzystałem z XDocuments, tam mogłem użyć metody load:

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

Jaki jest odpowiednik tej metody w przypadku formatu JSON? Używam JSON.NET.

ThdK
źródło

Odpowiedzi:

270

Skorzystaj z WebClientzajęć w System.Net:

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

Miej na uwadze, że WebClientto znaczy IDisposable, więc prawdopodobnie dodasz usingdo tego instrukcję w kodzie produkcyjnym. Wyglądałoby to następująco:

using (WebClient wc = new WebClient())
{
   var json = wc.DownloadString("url");
}
Zebi
źródło
8
Dlaczego pomijasz instrukcję using, której użyto w odpowiedzi Jona?
Skuli
1
To nie działa na mnie aż położę var json = wc.DownloadString("url");w try-catchbloku!
Alex Jolig
Znalazłem błąd „HttpRequestException: nie można przypisać żądanego adresu” .. to jest adres URL: „ localhost: 5200 / testapi / swagger / v1 / swagger.json , ale działa z adresem URL: petstore.swagger.io/v2/swagger.json
Uthen
102

AFAIK JSON.Net nie zapewnia funkcji odczytu z adresu URL. Musisz to zrobić w dwóch krokach:

using (var webClient = new System.Net.WebClient()) {
    var json = webClient.DownloadString(URL);
    // Now parse with JSON.Net
}
Jon
źródło
1
@jsmith: To nie była sugestia ... OP o tym wspomniał :)
Jon
Dzięki za pomoc. To dziwne, że nie znalazłem tego w Google, to naprawdę było podstawowe pytanie, prawda? Teraz mam błąd taki jak: Nie można deserializować obiektu JSON do typu „System.String”. Wiem, że jest to jakiś atrybut w mojej klasie, który jest nieprawidłowo zadeklarowany, ale po prostu nie mogę go znaleźć. Ale wciąż próbuję! :)
Czw
45

Jeśli używasz .NET 4.5 i chcesz użyć asynchroniczny można użyć HttpClientw System.Net.Http:

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

    // Now parse with JSON.Net
}
Richard Garside
źródło
1
Musisz go użyć w Taskzasync
Si8