首页 > 解决方案 > 向 CsvHelper.Configuration.ClassMap 对象添加验证(字符串)

问题描述

我使用 CsvHelper.Configuration.ClassMap 读取 csv 文件并面临数据验证。

我找到了 Validate 选项并写了一个简单的代码:

Map(m => m.Field).Name("myField").Validate(row => row.Contains('='));

但我不理解输出并且对可能的选项有点困惑。

所以,我的问题是:

  1. 如果它返回 true - 我会收到字符串吗?还是布尔真?之后我想将值添加到数据库中..

  2. 如果它返回 false - 我收到什么?而且,无论如何,该值不会添加到数据库中?

  3. 任何想法如何添加简单的验证?普通代码,未经验证:

    地图(m => m.Field).Name("myField");

先感谢您!

标签: c#csvcsvhelper

解决方案


您可以使用 CsvHelper 27.1.1 以这种方式编写它

Map(m => m.Field).Name("myField").Validate(x => x.Field.Contains('='));

在 15.0.3 中,您不会使用 Field

Map(m => m.Field).Name("myField").Validate(x => x.Contains("="));

Validate 函数具有以下签名:

public virtual MemberMap<TClass, TMember> Validate(Validate validateExpression);

Validate Type 是一个这样声明的委托:

public delegate bool Validate(ValidateArgs args);

ValidateArgs 具有我在代码示例中使用的属性 Field。

如果在转换过程中条件为假,它将抛出 FieldValidationException。

您可以捕获此异常并添加一些逻辑。

  1. 如果为 true,则转换将按预期工作,您的字段将被映射。
  2. 将抛出 FieldValidationException。
  3. 请参见上面的代码。

推荐阅读