Xamarin Forms 使用 httpclient 下载 json 文件:ReadAsStringAsync 或 DownloadFileAsync?

Xamarin Forms download a json file with httpclient : ReadAsStringAsync or DownloadFileAsync?

我使用 json 文件在 Xamarin Forms Android/Ios 应用程序中填充列表视图,并希望在开始时下载 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() 读取响应,然后使用流来反序列化 JSON 对象 JsonSerializer.