Come ottenere una stringa JSON dall'URL?


145

Sto cambiando il mio codice da XML a JSON.

Ma non riesco a trovare come ottenere una stringa JSON da un determinato URL.

L'URL è simile al seguente: " https://api.facebook.com/method/fql.query?query=.....&format=json "

Ho usato XDocuments prima, lì ho potuto usare il metodo di caricamento:

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

Qual è l'equivalente di questo metodo per JSON? Sto usando JSON.NET.

Risposte:


270

Usa la WebClientclasse in System.Net:

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

Tieni presente che WebClientè IDisposablecosì, quindi probabilmente aggiungerai usingun'istruzione a questo nel codice di produzione. Questo sembrerebbe:

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

8
Perché salti l'istruzione using utilizzata nella risposta di Jon?
Skuli,

1
Non ha funzionato per me fino a quando non ho messo var json = wc.DownloadString("url");in try-catchblocco!
Alex Jolig,

Ho trovato l'errore "HttpRequestException: impossibile assegnare l'indirizzo richiesto" .. questo è l'URL: " localhost: 5200 / testapi / swagger / v1 / swagger.json , ma ha funzionato con l'URL: petstore.swagger.io/v2/swagger.json
Uthen,

102

AFAIK JSON.Net non fornisce funzionalità per la lettura da un URL. Quindi devi farlo in due passaggi:

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

1
@jsmith: Non è stato un suggerimento ... l'OP l'ha menzionato :)
Jon

Grazie per avermi aiutato, è strano che non ho trovato questo su Google, questa è stata davvero una domanda di base, no? Ora sto riscontrando un errore del tipo: Impossibile deserializzare l'oggetto JSON nel tipo "System.String". So che è un attributo della mia classe che non è stato dichiarato correttamente, ma non riesco a trovare quale. Ma ci sto ancora provando! :)
Giovedì

45

Se si utilizza .NET 4.5 e si desidera utilizzare asincrono, è possibile utilizzare HttpClientin System.Net.Http:

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

    // Now parse with JSON.Net
}

1
Devi usarlo in a Taskconasync
Si8
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.