Как получить json-строку из url-адреса?


148

Я переключаю код формы XML на JSON.

Но я не могу найти, как получить строку JSON с заданного URL-адреса.

URL-адрес выглядит примерно так: " https://api.facebook.com/method/fql.query?query=.....&format=json "

Раньше я использовал XDocuments, там можно было использовать метод загрузки:

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

Что эквивалентно этому методу для JSON? Я использую JSON.NET.

Ответы:


276

Используйте этот WebClientкласс в System.Net:

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

Имейте в виду, что это WebClientесть IDisposable, поэтому вы, вероятно, добавили бы к нему usingоператор в производственном коде. Это будет выглядеть так:

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

8
Почему вы пропускаете оператор using в ответе Джона?
Скули

1
Это не работает для меня , пока я не положил var json = wc.DownloadString("url");в try-catchблоке!
Alex Jolig

Я обнаружил ошибку «HttpRequestException: невозможно назначить запрошенный адрес» .. это URL: « localhost: 5200 / testapi / swagger / v1 / swagger.json , но он работал с URL: petstore.swagger.io/v2/swagger.json
Uthen

105

AFAIK JSON.Net не предоставляет функции для чтения с URL-адреса. Итак, вам нужно сделать это в два этапа:

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

1
@jsmith: Это не было предложением ... ОП упомянул об этом :)
Джон

Спасибо за помощь. Странно, что я не нашел этого в Google, это действительно был основной вопрос, не так ли? Теперь у меня ошибка типа: Невозможно десериализовать объект JSON в тип System.String. Я знаю, что это какой-то атрибут в моем классе, который неправильно объявлен, но я просто не могу найти его. Но я все еще пытаюсь! :)
ThdK 06

46

Если вы используете .NET 4.5 и хотите использовать async, вы можете использовать HttpClientв System.Net.Http:

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

    // Now parse with JSON.Net
}

1
Вы должны использовать его в Taskсasync
СИ8
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.