使用ChoETL导入CSV时如何验证布尔值?
问题描述
我开发了一款供用户导入CSV并创建自定义列映射的工具,该工具采用ChoETL解析CSV文件。目前我正在添加布尔类型列,需要验证数据是否符合ChoETL默认设置ChoBooleanFormatSpec.ZeroOrOne。理想情况下,当数据类型不符合要求时能抛出异常(返回友好提示信息),但测试时输入“True”而非1,ChoETL将其解析为false。根据文档说明,仅能选择一种支持的格式,请问该如何实现需求?
引用:Cinchoo ETL会隐式处理CSV文件中布尔列值的解析/写入操作。若需精细控制解析逻辑,可通过
ChoTypeConverterFormatSpec.BooleanFormat全局指定,默认值为ChoBooleanFormatSpec.ZeroOrOne。
解决方案
要实现严格校验布尔值格式并在不符合时抛出异常的需求,可以通过自定义类型转换器替代ChoETL的默认布尔解析逻辑,具体步骤如下:
- 创建自定义布尔类型转换器
继承ChoTypeConverter类,重写ConvertFrom方法,仅允许0或1作为有效布尔值,其他值直接抛出异常:
public class StrictZeroOneBooleanConverter : ChoTypeConverter { public override object ConvertFrom(ChoTypeConverterContext context, object value) { string strValue = value?.ToString().Trim(); if (strValue == "1") return true; else if (strValue == "0") return false; else throw new ChoTypeConverterException($"无效的布尔值:{strValue},仅支持0或1格式"); } }
绑定自定义转换器
- 单列生效:在CSV映射配置中,为目标布尔列指定该转换器:
using (var parser = new ChoCSVReader<YourModel>("data.csv") .WithField(m => m.IsActive, converter: new StrictZeroOneBooleanConverter())) { foreach (var item in parser) { // 处理数据 } } - 全局生效:替换全局默认转换器,让所有布尔列都应用严格校验:
ChoTypeConverterFactory.Current.RegisterConverter(typeof(bool), new StrictZeroOneBooleanConverter());
- 单列生效:在CSV映射配置中,为目标布尔列指定该转换器:
返回友好提示
在解析逻辑中捕获ChoTypeConverterException,将异常信息转为用户易懂的提示即可。
内容的提问来源于stack exchange,提问作者Sora Teichman
相关产品推荐
相关产品推荐

