c# - 使用 CSVHelper 从 HttpResponseMessage 解析 CSV
问题描述
目前我正在使用两步方法从 Web Api 获取数据并将 CSV 记录反序列化为对象。
var response = await httpClient.GetAsync(queryString);
using (var reader = new StreamReader(await response.Content.ReadAsStreamAsync()))
{
var csvr = new CsvReader(reader);
var responseValue = csvr.GetRecords<TrainingDataSetData>().ToList();
result.Readings.AddRange(responseValue);
}
如何优化此代码?
解决方案
如果您试图避免创建中间体MemoryStream
- 您可以使用GetStreamAsync
on 方法HttpClient
,它应该返回原始NetworkStream
数据,以便您直接传递给 CsvHelper,而不是ReadAsStreamAsync
,这将默认在返回之前将完整响应读取到 aMemoryStream
中。
using (var reader = new StreamReader(await httpClient.GetStreamAsync(queryString)))
{
var csvr = new CsvReader(reader);
var responseValue = csvr.GetRecords<TrainingDataSetData>().ToList();
result.Readings.AddRange(responseValue);
}
如果您仍然需要访问HttpResponseMessage
,您可以通过 using 达到相同的效果HttpCompletionOption.ResponseHeadersRead
,它不会在返回之前缓冲响应。
var response = await httpClient.GetAsync(queryString, HttpCompletionOption.ResponseHeadersRead);
至于这是否实际上更有效 - 这需要在您的特定环境中进行基准测试来决定,因为它可能取决于响应的大小、网络的速度等。
推荐阅读
- python - 根据另一个获取一列中最常见的值/将pandas系列转换为列表字典
- android - 在Android中更改菜单抽屉汉堡图标的颜色
- javascript - 使动画对声音文件做出反应的 Javascript 代码在 Edge 中有效,但在 Chrome 中无效
- html - 网站未加载 CSS,网页未加载图像
- java - 创建安装在当前模块内的另一个模块的 guice 注入器
- java - 将arff文件打开到weka时出错
- javascript - Javascript 手风琴
- node.js - 将 JSON 文件作为节点参数传递给 PM2
- scala - Scala过滤多个条件
- aws-lambda - 无服务器 wsgi 无法导入 werkzeug