¿Cómo obtener una cadena json de url?

Respuestas:

270

Usa la WebClientclase en System.Net:

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

Tenga en cuenta que WebClientes IDisposableasí, por lo que probablemente agregaría una usingdeclaración a esto en el código de producción. Esto se vería así:

using (WebClient wc = new WebClient())
{
   var json = wc.DownloadString("url");
}
Zebi
fuente
8
¿Por qué omite la declaración de uso que se utiliza en la respuesta de Jon?
Skuli
1
No funcionó para mí, hasta que ponga var json = wc.DownloadString("url");en try-catchbloque!
Alex Jolig
Encontré el error "HttpRequestException: no se puede asignar la dirección solicitada" .. esta es URL: " localhost: 5200 / testapi / swagger / v1 / swagger.json , pero funcionó con URL: petstore.swagger.io/v2/swagger.json
Uthen
102

AFAIK JSON.Net no proporciona funcionalidad para leer desde una URL. Entonces debe hacer esto en dos pasos:

using (var webClient = new System.Net.WebClient()) {
    var json = webClient.DownloadString(URL);
    // Now parse with JSON.Net
}
Jon
fuente
1
@jsmith: No fue una sugerencia ... el OP lo mencionó :)
Jon
Gracias por ayudarme, es extraño que no haya encontrado esto en Google, esta fue realmente una pregunta básica, ¿no? Ahora tengo un error como: No se puede deserializar el objeto JSON en el tipo 'System.String'. Sé que es un atributo en mi clase que no está declarado correctamente, pero no puedo encontrar cuál. ¡Pero todavía lo estoy intentando! :)
ThdK
45

Si está usando .NET 4.5 y quiere usar asíncrono, puede usarlo HttpClienten System.Net.Http:

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

    // Now parse with JSON.Net
}
Richard Garside
fuente
1
Tienes que usarlo Taskcon unasync
Si8