Как получить строку JSON из URL?

#c# #json #facebook #linq-to-xml #webclient

#c# #json #Facebook #linq-to-xml #webclient

Вопрос:

Я переключаю свой код из XML в JSON.

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

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

Раньше я использовал XDocuments, там я мог использовать метод load:

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

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

Ответ №1:

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

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

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

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

Комментарии:

1. Почему вы пропускаете оператор using, который используется в ответе от Jon?

2. У меня это не работало, пока я не вставил var json = wc.DownloadString("url"); в try-catch блок!

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

4. WebClient устарел, и вам следует использовать HttpClient. Получаем stringasync, как показано ниже Ричардом Гарсайдом.

Ответ №2:

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

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

Комментарии:

1. @jsmith: Это было не предложение… в OP упоминалось об этом 🙂

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

Ответ №3:

Если вы используете .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