#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