使用 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);

}

如何优化此代码?


幕布斯7119047
浏览 229回答 1
1回答

米脂

如果您试图避免创建中间体MemoryStream- 您可以使用GetStreamAsyncon 方法HttpClient,它应该返回原始数据,NetworkStream因为您直接传递给 CsvHelper,而不是ReadAsStreamAsync,这将默认MemoryStream在返回之前将完整响应读入 a 。using (var reader = new StreamReader(await httpClient.GetStreamAsync(queryString))){&nbsp; &nbsp; var csvr = new CsvReader(reader);&nbsp; &nbsp; var responseValue = csvr.GetRecords<TrainingDataSetData>().ToList();&nbsp; &nbsp; result.Readings.AddRange(responseValue);}如果您仍然需要访问 ,则HttpResponseMessage可以通过使用 来达到相同的效果HttpCompletionOption.ResponseHeadersRead,它不会在返回之前缓冲响应。var response = await httpClient.GetAsync(queryString, HttpCompletionOption.ResponseHeadersRead);至于这是否实际上更有效 - 这需要在您的特定环境中进行基准测试来决定,因为它可能取决于响应的大小、网络速度等。
打开App,查看更多内容
随时随地看视频慕课网APP