You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#自动化读取CSV文件触发CSV Helper:Bad Data Exception异常如何解决

C#使用CsvHelper读取CSV触发Bad Data Exception及变量返回null问题解决方案

问题背景:编写C#自动化代码时仅使用单个CSV文件读取数据,仅在读取部分特定值时触发CsvHelper:Bad Data Exception异常,本应赋值为Xpath的strIdentifierType变量返回值为null,代码逻辑、CSV文件指向均未修改,开发环境为Visual Studio 2019。

核心排查及解决方案

  • CSV文件隐藏格式/特殊字符问题
    触发异常的对应行字段大概率包含引号、换行符、逗号这类CsvHelper默认的分隔/转义相关特殊字符,也可能是CSV保存时带了BOM编码、存在不可见的零宽空格/制表符。可先用纯文本编辑器打开异常行对应字段排查,同时修改CsvHelper配置兼容特殊字符:
    配置示例代码:
    var config = new CsvConfiguration(CultureInfo.InvariantCulture)
    {
        AllowComments = false,
        BadDataFound = null, // 忽略坏数据错误,也可自定义处理逻辑
        Delimiter = ",",
        Mode = CsvMode.RFC4180,
        TrimOptions = TrimOptions.Trim
    };
    using (var reader = new StreamReader("你的CSV文件路径"))
    using (var csv = new CsvReader(reader, config))
    {
        // 原有读取逻辑
    }
    
  • 列名映射不匹配问题
    检查CSV文件中对应strIdentifierType的列名是否有多余空格、大小写差异,或者部分行该列本身为空值。可通过手动指定字段映射避免自动映射失败返回null:
    映射示例代码:
    public sealed class CsvMap : ClassMap<你的数据实体类名>
    {
        public CsvMap()
        {
            Map(m => m.strIdentifierType).Name("CSV文件中对应列的实际名称");
        }
    }
    // 读取前注册映射规则
    csv.Context.RegisterClassMap<CsvMap>();
    
  • 异常捕获逻辑导致的赋值失败问题
    部分行读取触发BadDataException后,如果现有异常捕获逻辑直接跳过了字段赋值步骤,也会导致变量拿到null。可在配置中添加日志输出定位异常行:
    日志配置示例:
    BadDataFound = context => 
    {
        Debug.WriteLine($"坏数据行号:{context.Context.Parser.Row}, 原始内容:{context.RawRecord}");
    }
    

内容的提问来源于stack exchange,提问作者Sindhu Sivaraman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 07:30:02