Como obter uma string json de url?

145

Estou mudando meu XML do formulário de código para JSON.

Mas não consigo encontrar como obter uma string JSON de um determinado URL.

O URL é mais ou menos assim: " https://api.facebook.com/method/fql.query?query=.....&format=json "

Eu usei XDocuments antes, lá eu poderia usar o método load:

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

Qual é o equivalente desse método para JSON? Estou usando o JSON.NET.

ThdK
fonte

Respostas:

270

Use a WebClientclasse em System.Net:

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

Tenha em mente que WebClienté IDisposable, então você provavelmente adicionar uma usingdeclaração para isso no código de produção. Seria assim:

using (WebClient wc = new WebClient())
{
   var json = wc.DownloadString("url");
}
Zebi
fonte
8
Por que você pula a declaração de uso usada na resposta de Jon?
Skuli 30/05
1
Não funcionou para mim até eu colocar var json = wc.DownloadString("url");em try-catchbloco!
precisa saber é o seguinte
Encontrei o erro "HttpRequestException: não é possível atribuir o endereço solicitado" .. este é o URL: " localhost: 5200 / testapi / swagger / v1 / swagger.json , mas funcionou com o URL: petstore.swagger.io/v2/swagger.json
Até 30/08/19
102

O AFAIK JSON.Net não fornece funcionalidade para leitura de um URL. Então, você precisa fazer isso em duas etapas:

using (var webClient = new System.Net.WebClient()) {
    var json = webClient.DownloadString(URL);
    // Now parse with JSON.Net
}
Jon
fonte
1
@jsmith: Não era uma sugestão ... o OP mencionou :)
Jon
Thx por me ajudar, é estranho que eu não encontrei isso no google, essa foi realmente uma pergunta básica, não é? Agora estou tendo um erro como: Não é possível desserializar o objeto JSON para o tipo 'System.String'. Eu sei que é algum atributo da minha classe que não está declarado corretamente, mas simplesmente não consigo encontrar qual. Mas eu ainda estou tentando! :)
ThdK 06/04
45

Se você estiver usando .NET 4.5 e quiser usar assíncrona, então você pode usar HttpClientem System.Net.Http:

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

    // Now parse with JSON.Net
}
Richard Garside
fonte
1
Você tem que usá-lo em um Taskcomasync
Si8