如何获取字段名以判断是否需为CSV字段添加引号?
解决方案
方法一:通过字段索引匹配字段名
你可以利用args.Context.CurrentIndex获取当前字段的索引,结合CSV的表头字段名列表判断是否需要加引号。示例代码如下:
// 定义需要加引号的字段名列表 var quoted = new List<string> { "Field1", "Field3" }; List<string> headerNames; var config = new CsvConfiguration(CultureInfo.InvariantCulture) { ShouldQuote = args => { // 首次处理时获取完整表头 if (headerNames == null) { headerNames = args.Context.HeaderRecord.ToList(); } // 根据索引拿到对应字段名,判断是否在目标列表中 var fieldName = headerNames[args.Context.CurrentIndex]; return quoted.Contains(fieldName); } };
方法二:通过ClassMap配置指定字段
如果是基于实体类导出CSV,更推荐在ClassMap中为特定字段单独设置引号规则,逻辑更直观:
public class YourEntityMap : ClassMap<YourEntity> { public YourEntityMap(List<string> quotedFields) { // 为目标字段强制添加引号 foreach (var field in quotedFields) { Map(m => m.GetType().GetProperty(field)).Quote(); } // 其他字段沿用默认规则 AutoMap(CultureInfo.InvariantCulture); } } // 使用示例 var config = new CsvConfiguration(CultureInfo.InvariantCulture); using (var writer = new CsvWriter(..., config)) { writer.Context.RegisterClassMap(new YourEntityMap(quoted)); // 执行数据写入操作 }
注意:动态表头场景优先用方法一;实体类导出场景方法二更易维护。
内容的提问来源于stack exchange,提问作者Ivan-Mark Debono
相关产品推荐
相关产品推荐

