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.

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");
}

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
}

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
}

1
Sie müssen es in einem Taskmitasync
Si8
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.