如何使用CSV Helper将嵌套字符串列表写入CSV文件?
解决方案:用CsvHelper写入嵌套字符串列表到CSV
你的代码生成空白文件主要有两个原因:
WriteRecord是为对象类型设计的,无法直接将List<string>的元素解析为CSV列;- 未刷新/关闭StreamWriter,缓冲区内容没有写入磁盘。
下面是两种可行的修复方案:
方案一:手动逐字段写入(推荐)
直接遍历每个Entry的字段,逐个写入后换行,同时用using语句自动管理资源:
var rawDataList = await _siteRepository.GetRawSiteData(siteGuid); var entries = _siteRepository.GetSiteData(rawDataList); // using语句会自动释放资源并刷新缓冲区 using var writer = new StreamWriter("YodelTesting.csv"); using var csv = new CsvWriter(writer, CultureInfo.InvariantCulture); // 可选:写入表头 csv.WriteField("Date"); csv.WriteField("param1"); csv.WriteField("param2"); csv.WriteField("param3"); csv.WriteField("param4"); csv.NextRecord(); // 写入每行数据 foreach (var entry in entries) { foreach (var field in entry) { csv.WriteField(field); } csv.NextRecord(); // 写完一行后切换到下一行 }
方案二:利用CsvHelper的WriteRecords结合自定义处理
如果想简化遍历,可以直接使用WriteRecords处理字符串列表集合:
var rawDataList = await _siteRepository.GetRawSiteData(siteGuid); var entries = _siteRepository.GetSiteData(rawDataList); using var writer = new StreamWriter("YodelTesting.csv"); using var csv = new CsvWriter(writer, CultureInfo.InvariantCulture); // 写入表头(可选) csv.WriteField("Date"); csv.WriteField("param1"); csv.WriteField("param2"); csv.WriteField("param3"); csv.WriteField("param4"); csv.NextRecord(); // 直接写入所有记录 csv.WriteRecords(entries);
关键注意事项
- 必须确保StreamWriter和CsvWriter被正确释放,
using语句是最安全的方式,避免缓冲区数据丢失; - 如果你的
Entry长度不固定,手动写入的方式更灵活,能适配不同列数的情况。
内容的提问来源于stack exchange,提问作者Myles Louw
相关产品推荐
相关产品推荐

