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
.
我使用 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
.