当 CSV 文件中缺少某个字段时,会引发异常。当字段丢失时,我宁愿映射另一个值(例如空字符串)。
Map(dest => dest.PatientID).Name("Patient ID");
CsvHelper.CsvMissingFieldException: 'Fields 'Patient ID' do not exist in the CSV file.'
如果使用配置设置 IgnoreReadingExceptions,则不会将任何记录读入结果中。
var csv = new CsvReader(sr);
csv.Configuration.RegisterClassMap<TMap>();
csv.Configuration.IgnoreReadingExceptions = true;
records = csv.GetRecords<TR>().ToList();
如何更改映射,以便当映射字段丢失时,可以用另一个表达式替换它?
在 2.x 中你可以这样做:
csv.Configuration.WillThrowOnMissingField = false;
在 3.x 中你可以这样做:
// Turn off.
csv.Configuration.MissingFieldFound = null;
// Log missing field.
csv.Configuration.MissingFieldFound = ( headerNames, index, context ) =>
{
logger.WriteLine( $"Field with names ['{string.Join( "', '", headerNames )}'] at index '{index}' was not found. ");
};
在更高版本中,CsvReader 配置是只读的,例如这不再起作用:
csv.Configuration.MissingFieldFound = null;
您可以在之前的配置中设置
比如 30.x 你可以使用这样的东西:
var config = new CsvHelper.Configuration.CsvConfiguration(System.Globalization.CultureInfo.InvariantCulture)
{
MissingFieldFound = args => {
logger.WriteLine( $"Field with names ['{string.Join( "', '", args.HeaderNames)}'] at index '{args.Index}' was not found. ");
//do something with (args.Index, args.HeaderNames,args.Context.
}
};
或者什么都没有
var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture)
{
MissingFieldFound = () => { }
};
然后使用配置:
using (var csvReader = new CsvReader(reader, config))