使用CsvHelper仅将选定的列写入csv文件

本文关键字:csv 文件 CsvHelper 使用 | 更新日期: 2023-09-27 18:05:49

我有一个从web服务获取数据的小程序。程序接受JSON响应,将其映射到poco,并将对象写入CSV文件(自动映射)。当我要求数据集中的"所有"数据时,它可以完美地工作,但是,如果我像这样查询资源(通过OData):"$select EmpNo, FirstName, LastName",CSV编写器仍然会将所有列写入CSV头,例如。"EmpNo, FirstName, LastName, Street, Address, City, Age"等,只是插入0(如果是int), false(如果是boolean)或"(如果是string)到没有数据的列。

web服务正确地只返回指定的列,所以这不是问题。我使用CsvHelper进行对象映射和csv编写。(但我愿意使用任何可以解决我问题的方法)

我想只写"EmpNo, FirstName, LastName"和列的数据到csv文件,如果这是我在OData查询中要求的。

有解决这个问题的好主意吗?

使用CsvHelper仅将选定的列写入csv文件

如果不知道您正在使用的确切代码,则很难判断。但我的猜测是,当你写你的对象列表时,你使用的模型中有额外的字段,它们都是空的,因为你没有通过odata请求它们。

如果你只想要CsvHelper的子集,你可能想要指定一个CsvClassMap<T>,它将把你现有的模型映射到你想要的字段

这里有很多关于CsvClassMap的例子:http://joshclose.github.io/CsvHelper/

write方法可能有一个方法重载,该方法将接受一个classmap。

您可以创建一个ClassMapper并指定您想要写入对象的哪些属性(以及您想要如何写入它们!)
https://joshclose.github.io/CsvHelper/examples/configuration/class-maps/mapping-properties

当你写的时候,只要指定ClassMapper

using (var writer = new StreamWriter("path''to''file.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
    csv.Configuration.RegisterClassMap<NameOfClassMapper>();
    csv.WriteRecords(records);
}