我正在尝试将图像源属性设置为从 API 以 JSON 格式返回的 Uri。返回的 JSON 对象有两个属性。
我创建了以下辅助类来查询 API 并提取 Uri 属性:
public class GetPicUri
{
public GetPicUri()
{
}
private string _uri;
public async Task<string> Get()
{
var uri = new Uri("https://randompicture.api/random");
HttpClient getResponse = new HttpClient();
var json = await getResponse.GetStringAsync(uri);
var picture = JsonConvert.DeserializeObject<Picture>(json);
_uri = picture.Uri;
return _uri;
}
}
这是用于反序列化 JSON 的模型:
public class Picture
{
public Picture()
{
}
public string Description { get; set; }
public string Uri { get; set; }
}
问题是我无法访问 GetPicUri 类的字符串属性:
var picUri = new GetPicUri();
string imageSource = picUri.Get();
当我尝试这个时,我每次都会遇到异常:
cannot convert from 'System.Threading.Tasks.Task' to 'string'
我试过用很多不同的方式来分割它,例如将 Uri 作为静态字符串,并将 Get 方法作为 async Task
(或 void
) 并让它只更新静态字符串,并从构造函数中调用。我试过将它作为属性的 Get 方法运行。但我无法让它工作。
所以我想我有两个问题,第一个是我在这里具体做错了什么,从设计的角度来看,正确的方法是什么?
最佳答案
如果方法实际上是异步的,则将 Aync
添加到方法的名称中是一种很好的做法 - 例如:
public async Task<string> GetAsync()
{
var uri = new Uri("https://randompicture.api/random");
HttpClient getResponse = new HttpClient();
var json = await getResponse.GetStringAsync(uri);
var picture = JsonConvert.DeserializeObject<Picture>(json);
_uri = picture.Uri;
return _uri;
}
调用方式:
await picUri.GetAsync();
关于c# - 这种异步/等待方法有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54509414/