【问题标题】:Add validation to CsvHelper.Configuration.ClassMap object (string)向 CsvHelper.Configuration.ClassMap 对象添加验证(字符串)
【发布时间】:2021-12-01 02:09:13
【问题描述】:

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

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

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

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

所以,我的问题是:

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

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

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

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

提前谢谢你!

【问题讨论】:

    标签: c# csv csvhelper


    【解决方案1】:

    您可以使用 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("="));
    

    验证函数具有以下签名:

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

    验证类型是这样声明的委托:

    public delegate bool Validate(ValidateArgs args);
    

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

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

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

    1. 如果为 true,则转换将按预期进行,您的字段将被映射。
    2. 将引发 FieldValidationException。
    3. 参见上面的代码。

    【讨论】:

    • 你能解释一下“x => x.Field.Contains('=')”和“row => row.Contains('=')”之间的区别吗?有什么改变吗?
    • 您使用的是什么版本的 CsvHelper?因为我无法按照您的方式使用它,因为它根本无法在 27.1.1 中编译。
    • 15.0.3.它已经过时了,但我不想升级它。对解决方案有影响吗?
    • 有趣的细节:抛出了 FieldValidationException,而不是 HeaderValidationException。仅供参考
    • 你是对的,它是 FieldValidationException 而不是 HeaderValidationException 我会纠正这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多