c# - CsvHelper 不验证是否设置了转换
问题描述
使用 CsvHelper 库,如果 Map 定义了 Convert ,则不会触发验证。
例子:
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);
});
如果我运行此代码,则只有 Convert 触发,但 Validate 被跳过。
我究竟做错了什么?
解决方案
我不确定为什么该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" };
}
推荐阅读
- php - HelloSign iframe 在 PHP 自定义页面中显示
- javascript - C# 方法跳过 java 脚本调用
- csv - Grails:将解析的 csv 数据保存到数据库
- c++ - 前向声明 typedef 保护
- intellij-idea - 协程工作但 IntelliJ 显示错误
- javascript - 蜘蛛/雷达图 D3.js 的轴问题
- javascript - 错误:未捕获(在承诺中):未处理的承诺拒绝
- ionic-framework - 项目中每个页面的 Ionic 3 选项卡
- java - 使用 ajax 将模型和字符串传递给 Spring MVC
- javascript - JavaScript 中的对象类型