在CsvHelper中如何捕获转换错误并知道它发生在哪个字段和哪一行?

t31*_*316 29 csvhelper

CsvReader成功地使用了这个类并且对它很满意,但是,我使用的文件是由一个更改列格式而不让我知道的组生成的.

所以,有一瞬间一切正常,然后第二天早上事情中断并且try catch块会csv.GetRecord<MyType>()捕获错误并记录错误,但是我无法从Exception实例中收集任何有价值的信息.它只是说:"无法进行转换." 与InnerException无关.不是很有用.我甚至不知道我的150列中的哪一列导致了问题.

你能帮我弄清楚如何确定哪一行导致问题的哪一列?

谢谢

Jos*_*ose 46

目前,无法忽略字段/属性级别的错误.您目前的选择是这些:

查看异常数据.

catch( Exception ex )
{
    // This contains useful information about the error.
    ex.Data["CsvHelper"];
}
Run Code Online (Sandbox Code Playgroud)

忽略读取异常.这是在行级别,但不是字段.它将允许仍然读取整个文件,并忽略不起作用的行.发生异常时,您可以获得回调.

csv.Configuration.IgnoreReadingExceptions = true;
csv.Configuration.ReadingExceptionCallback = ( ex, row ) =>
{
    // Do something with the exception and row data.
    // You can look at the exception data here too.
};
Run Code Online (Sandbox Code Playgroud)


t31*_*316 7

首先,似乎我需要捕获CsvTypeConverterException.

 while (csv.Read())
    {
       try
       {    
          var record = csv.GetRecord<MyType>();    
       }
       catch (CsvTypeConverterException ex)
       {
         //ex.Data.Values has more info...
       }
    }
Run Code Online (Sandbox Code Playgroud)

我现在知道如何调查出了什么问题,但是如何确保跳​​过该字段但是该行中的其余字段被转换,这样整个行都不会被丢弃?

谢谢