¿Cómo obtener una cadena json de url?


145

Estoy cambiando mi código de formulario XML a JSON.

Pero no puedo encontrar cómo obtener una cadena JSON de una URL dada.

La URL es algo como esto: " https://api.facebook.com/method/fql.query?query=.....&format=json "

Usé XDocuments antes, allí podría usar el método de carga:

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

¿Cuál es el equivalente de este método para JSON? Estoy usando JSON.NET.

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");
}

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
}

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
}

1
Tienes que usarlo Taskcon unasync
Si8
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.