使用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"
这是因为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
。