Як отримати рядок json з URL?


145

Я перемикаю форму коду XML на JSON.

Але я не можу знайти, як отримати рядок JSON з заданої URL-адреси.

URL-адреса є приблизно такою: " https://api.facebook.com/method/fql.query?query=.....&format=json "

Раніше я використовував XDocuments, там я міг використовувати метод навантаження:

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

Який еквівалент цього методу для JSON? Я використовую JSON.NET.

Відповіді:


270

Використовуйте WebClientклас у System.Net:

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

Майте на увазі, що WebClientце IDisposableтак, тому ви, ймовірно, додасте usingдо цього заяву у виробничий код. Це виглядатиме так:

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

8
Чому ви пропускаєте використовуючи оператор, який використовується у відповіді від Джона?
Скулі

1
Це не спрацювало для мене, поки я не поставив var json = wc.DownloadString("url");у try-catchблок!
Алекс Джоліг

Я виявив помилку "HttpRequestException: Неможливо призначити запитувану адресу". Це URL: " localhost: 5200 / testapi / swagger / v1 / swagger.json , але він працює з URL: petstore.swagger.io/v2/swagger.json
Uthen

102

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

45

Якщо ви використовуєте .NET 4.5 і хочете використовувати асинхронний , то ви можете використовувати HttpClientв System.Net.Http:

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

    // Now parse with JSON.Net
}

1
Ви повинні використовувати його в Taskсasync
Si8
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.