【问题标题】:CsvHelper not Validating if Conversion is setCsvHelper 不验证是否设置了转换
【发布时间】:2021-12-12 01:12:57
【问题描述】:

使用 CsvHelper 库,如果 Map 定义了转换,则不会触发验证。

例子:

Map(m => m.ProjectStock)
                .Validate(x =>
                    csvMapHelper.TrueStringsList.Contains(x.Field) || csvMapHelper.FalseStringList.Contains(x.Field))
                .Convert(args =>
                {
                    var projectStock = args.Row.GetField("ProjectStock");
                    return csvMapHelper.TrueStringsList.Contains(projectStock);
                });

如果我运行此代码,只会触发转换,但会跳过验证。

我做错了什么?

【问题讨论】:

    标签: c# .net csv csvhelper


    【解决方案1】:

    我不确定为什么 Validate 方法不会触发。但是,我相信有一种更简单的方法可以做您想做的事情。

    void Main()
    {
        using (var reader = new StringReader("Id,Name,ProjectStock\n1,Jordan,tak\n2,Beth,no"))
        using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
        {
            csv.Context.TypeConverterOptionsCache.GetOptions<bool>().BooleanTrueValues.AddRange(CsvMapHelper.TrueStringsList);
            csv.Context.TypeConverterOptionsCache.GetOptions<bool>().BooleanFalseValues.AddRange(CsvMapHelper.FalseStringList);
            var records = csv.GetRecords<Foo>().ToList();
        }   
    }
    
    public class Foo
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public bool ProjectStock { get; set; }
    }
    
    public class CsvMapHelper
    {
        public static List<string> TrueStringsList => new List<string> { "yes", "true", "tak" };
        public static List<string> FalseStringList => new List<string> { "no", "false", "nie" };    
    }
    

    【讨论】:

      猜你喜欢
      • 2020-08-01
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      • 2020-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-16
      相关资源
      最近更新 更多