Wie bekomme ich einen JSON-String von der URL?

145

Ich wechsle mein Codeformular XML zu JSON.

Ich kann jedoch nicht herausfinden, wie eine JSON-Zeichenfolge aus einer bestimmten URL abgerufen werden kann.

Die URL lautet ungefähr so: " https://api.facebook.com/method/fql.query?query=.....&format=json "

Ich habe vorher XDocuments verwendet, dort konnte ich die Lademethode verwenden:

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

Was entspricht dieser Methode für JSON? Ich benutze JSON.NET.

ThdK
quelle

Antworten:

270

Verwenden Sie die WebClientKlasse in System.Net:

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

Beachten Sie, dass WebClientist IDisposable, so dass Sie wahrscheinlich eine hinzufügen würde usingErklärung dazu im Produktionscode. Das würde so aussehen:

using (WebClient wc = new WebClient())
{
   var json = wc.DownloadString("url");
}
Zebi
quelle
8
Warum überspringen Sie die using-Anweisung, die in der Antwort von Jon verwendet wird?
Skuli
1
Es hat bei mir nicht funktioniert, bis ich var json = wc.DownloadString("url");in try-catchBlock gesetzt habe!
Alex Jolig
Ich habe den Fehler "HttpRequestException: Angeforderte Adresse kann nicht zugewiesen werden" gefunden. Dies ist die URL: " localhost: 5200 / testapi / swagger / v1 / swagger.json , aber es funktioniert mit der URL: petstore.swagger.io/v2/swagger.json
Uthen
102

AFAIK JSON.Net bietet keine Funktionen zum Lesen von einer URL. Sie müssen dies also in zwei Schritten tun:

using (var webClient = new System.Net.WebClient()) {
    var json = webClient.DownloadString(URL);
    // Now parse with JSON.Net
}
Jon
quelle
1
@jsmith: Es war kein Vorschlag ... das OP erwähnte es :)
Jon
Danke, dass du mir geholfen hast. Es ist seltsam, dass ich das bei Google nicht gefunden habe. Das war wirklich eine grundlegende Frage, nicht wahr? Ich habe jetzt einen Fehler wie: JSON-Objekt kann nicht vom Typ 'System.String' deserialisiert werden. Ich weiß, dass es ein Attribut in meiner Klasse ist, das nicht richtig deklariert ist, aber ich kann einfach nicht finden, welches. Aber ich versuche es immer noch! :)
ThdK
45

Wenn Sie mit .NET 4.5 und verwenden möchten async dann können Sie verwenden HttpClientin System.Net.Http:

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

    // Now parse with JSON.Net
}
Richard Garside
quelle
1
Sie müssen es in einem Taskmitasync
Si8