You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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());
      
  • 返回友好提示
    在解析逻辑中捕获ChoTypeConverterException,将异常信息转为用户易懂的提示即可。


内容的提问来源于stack exchange,提问作者Sora Teichman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 11:47:06