首页 > 解决方案 > 使用 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);
}

如何优化此代码?

标签: c#dotnet-httpclientcsvhelperhttpresponsemessage

解决方案


如果您试图避免创建中间体MemoryStream- 您可以使用GetStreamAsyncon 方法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);

至于这是否实际上更有效 - 这需要在您的特定环境中进行基准测试来决定,因为它可能取决于响应的大小、网络的速度等。


推荐阅读