使用httpClient获取JSON字符串

本文关键字:字符串 JSON 获取 httpClient 使用 | 更新日期: 2023-09-27 18:25:13

我正在使用Xamarin Forms,并试图为位于此处的文件获取JSON字符串。然而,我似乎没能把Json串出来。这是我的代码:

public async static Task<string> GetJson(string URL)
{
    using (HttpClient client = new HttpClient())
    using (HttpResponseMessage response = await client.GetAsync(URL))
    using (HttpContent content = response.Content)
    {
        // ... Read the string.
        return await content.ReadAsStringAsync();
    }
}
private static void FindJsonString()
{
    Task t = new Task(GetJson("https://dl.dropboxusercontent.com/u/37802978/policyHolder.json"));
    t.Start();
    t.Wait();
    string Json = t.ToString();
}

我做错了什么?

我收到这2个与有关的错误

Task t = new Task(GetJson("https://dl.dropboxusercontent.com/u/37802978/policyHolder.json"));

错误1
与"System.Threading.Tasks.Tasks.Task(System.Action)"匹配的最佳重载方法具有一些无效参数

错误2
参数1:无法从"System.Threading.Tasks.Task"转换为"System.Action"

使用httpClient获取JSON字符串

这是因为new Task需要一个Action委托,而您传递给它的是Task<string>

不要使用new Task,使用Task.Run。另外,请注意,您正在传递一个async方法,您可能需要await GetJson:

所以你要么需要

var task = Task.Run(() => GetJson("https://dl.dropboxusercontent.com/u/37802978/policyHolder.json"));

或者,如果您想在Task.Run:中使用await

var task = Task.Run(async () => await GetJson("https://dl.dropboxusercontent.com/u/37802978/policyHolder.json"));

它们在返回类型上也会有所不同。前者将返回一个Task<Task<string>>,而后者将返回Task<string>

TPL指南规定异步方法应该以Async后缀结束。考虑将GetJson重命名为GetJsonAsync