【问题标题】:Xamarin Forms download a json file with httpclient : ReadAsStringAsync or DownloadFileAsync?Xamarin Forms 使用 httpclient 下载 json 文件:ReadAsStringAsync 还是 DownloadFileAsync?
【发布时间】:2020-08-29 16:37:57
【问题描述】:

我使用 json 文件在 Xamarin Forms Android/Ios 应用程序中填充列表视图,并且喜欢在启动时下载 json 文件。

使用 ReadAsStringAsync 还是 DownloadFileAsync 哪个更好?

DownloadFileAsync 不只适用于二进制文件?螺母可能最快然后读取字符串并写入它:)

谢谢

【问题讨论】:

  • 对于 JSON,将其读取为字符串。如果序列化程序支持字节数组,则读取为字节。

标签: c# xamarin xamarin.forms httpclient


【解决方案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 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多