Xamarin Forms 使用 httpclient 下载 json 文件:ReadAsStringAsync 还是 DownloadFileAsync?
Posted
技术标签:
【中文标题】Xamarin Forms 使用 httpclient 下载 json 文件:ReadAsStringAsync 还是 DownloadFileAsync?【英文标题】:Xamarin Forms download a json file with httpclient : ReadAsStringAsync or DownloadFileAsync? 【发布时间】:2020-08-29 16:37:57 【问题描述】:我使用 json 文件在 Xamarin Forms android/ios 应用程序中填充列表视图,并且喜欢在启动时下载 json 文件。
使用 ReadAsStringAsync 还是 DownloadFileAsync 哪个更好?
DownloadFileAsync 不只适用于二进制文件?螺母可能最快然后读取字符串并写入它:)
谢谢
【问题讨论】:
对于 JSON,将其读取为字符串。如果序列化程序支持字节数组,则读取为字节。 【参考方案1】:通常您希望下载 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
。
【讨论】:
【参考方案2】:如果您要将数据作为文件直接保存到磁盘,请使用 DownloadFileAsync() - 这将是比ReadAsStringAsync()
更简单、更快速的解决方案,因为DownloadFileAsync()
将使用流将内容写入文件,而不是首先将网络数据作为字符串读取并使用StreamWriter
将其写入文件流。
String
对性能没有好处。即使您想直接以代码解析从网络下载的 JSON 内容而不是保存在磁盘上,您也可以使用 ReadAsStreamAsync()
读取响应,然后使用 JsonSerializer
反序列化 JSON 对象。
【讨论】:
以上是关于Xamarin Forms 使用 httpclient 下载 json 文件:ReadAsStringAsync 还是 DownloadFileAsync?的主要内容,如果未能解决你的问题,请参考以下文章
如果调用方未使用 Xamarin.Forms,Xamarin 依赖项服务能否正常工作?
在 Xamarin.Forms 中使用 Android 绑定