Как получить 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.

ThdK
источник

Ответы:

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