如何解决Xamarin Forms使用httpclient下载json文件:ReadAsStringAsync或DownloadFileAsync?
我在Xamarin Forms Android / Ios应用程序中使用json文件填充listview,并且喜欢在启动时下载json文件。
使用ReadAsstringAsync或DownloadFileAsync更好吗?
DownloadFileAsync是否仅适用于二进制文件?可能是最快的,然后读字符串并将其写入:)
谢谢
解决方法
通常,您要下载JSON内容并直接反序列化到模型。例如:
private sealed class YourModel
{
public int SomeProperty { get; set; }
public string SomeOtherProperty { get; set; }
}
using (var req = await _httpClient.GetAsync("https://www.example.com/api/endpoint"))
{
req.EnsureSuccessStatusCode();
using (var s = await req.Content.ReadAsStreamAsync())
using (var sr = new StreamReader(s))
using (var jtr = new JsonTextReader(sr))
{
var obj = new JsonSerializer().Deserialize<YourModel>();
}
}
可以使用一些扩展名来简化此操作,例如,如果您导入了System.Net.Http.HttpClientExtensions
nuget包,则可以这样做:
using (var req = await _httpClient.GetAsync("https://www.example.com/api/endpoint"))
{
EnsureSuccessStatusCode();
var obj = await req.Content.ReadAsAsync<YourModel>();
}
如果您不想使用模型,则通常将JSON内容下载为string
。
如果要直接将数据作为文件保存到磁盘,请使用DownloadFileAsync()-这是比ReadAsStringAsync()
更简单,更快捷的解决方案,因为DownloadFileAsync()
将使用流在其中写入内容文件,而不是先将网络数据作为字符串读取并使用StreamWriter
将其写入文件流。
String
永远不会提高性能。即使您想直接通过代码解析从网络下载的JSON内容而不是保存在磁盘上,也可以使用ReadAsStreamAsync()
读取响应,然后使用JsonSerializer
进行流式反序列化JSON对象。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。