如何从URL获取JSON字符串?

165

我正在将代码从XML切换到JSON。

但是我找不到如何从给定的URL获取JSON字符串。

URL类似于这样:“https://api.facebook.com/method/fql.query?query=.....&format=json”

以前我使用过XDocuments,在那里我可以使用load方法:

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

这个方法在 JSON 中有什么等效的替代方法吗?我正在使用 JSON.NET。

3个回答

289

使用System.Net中的WebClient类:

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

记住 WebClientIDisposable,所以在生产代码中,你可能会添加一个 using 语句。 示例:

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

8
为什么你跳过了Jon的答案中使用的using语句? - Skuli
1
直到我将 var json = wc.DownloadString("url"); 放在 try-catch 块中,它才对我起作用! - Ghasem
我发现了错误:"HttpRequestException: Cannot assign requested address"。这是URL:"http://localhost:5200/testapi/swagger/v1/swagger.json",但是它可以使用URL:"https://petstore.swagger.io/v2/swagger.json"。 - Uthen
3
WebClient现在已经过时,您应该像Richard Garside所示的那样使用httpClient.GetStringAsync。 - MBentley

109

据我所知,JSON.Net没有提供读取URL的功能。因此,您需要分为两个步骤完成:

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

1
@jsmith:这不是建议... OP提到了它 :) - Jon
谢谢你的帮助,我觉得很奇怪在谷歌上找不到这个问题的答案。这难道不是一个基本问题吗?现在我遇到了一个错误:“无法将JSON对象反序列化为类型'System.String'”。我知道是我的某个类中的属性声明不正确,但我就是找不出哪一个。但我还在努力中! :) - ThdK

56
如果您使用的是.NET 4.5并希望使用异步,则可���使用System.Net.Http中的HttpClient
using (var httpClient = new HttpClient())
{
    var json = await httpClient.GetStringAsync("url");

    // Now parse with JSON.Net
}

2
你必须在一个带有asyncTask中使用它。 - Si8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接