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

CsvHelper配置TrimOptions后带空格的整数字段绑定失败如何解决

CsvHelper整数字段末尾带空格转换失败问题解决

问题描述

使用CsvHelper读取CSV文件时,原本为整数类型的字段末尾附带空格(如0 、12 ),无法正常绑定转换为int类型。已配置TrimOptions.Trim参数但修剪规则未生效。
现有读取代码如下:

using (TextReader reader = new StreamReader(datei))
{
    CsvConfiguration configuration = new CsvConfiguration(CultureInfo.GetCultureInfo("de-DE"));
    configuration.BadDataFound = null;
    configuration.TrimOptions = TrimOptions.Trim;
    

    using (var csv = new CsvReader(reader, configuration))
    {
        ArtikeldatenLieferant = csv.GetRecords<AllnetArtikel>().ToList();
    }
}

触发问题的CSV单行示例:

Nr.;ALLNET-Artikelnummer;Hersteller-Artikelnummer;Hersteller;Produktbezeichnung;EAN Nummer;Kategorieebene1;Kategorieebene2;Kategorieebene3;HEK;Artikelzustand;UVP;Produktbeschreibung;Gewicht;Lagerbestand 
9234;193301;AL-MSUC-SUF-S;Audiocodes Live;Audiocodes Live - AL-MSUC-SUF-S;;Telekommunikation;Voice over IP;Voice over IP - Gateway Support;2739,13;neu;3043,48;"AudioCodes Live non-recurring setup fee, for each customer site with up to 500 users. Includes delivery, Planning and Design consulting service, Implementation service (configuration and basic verification) for AudioCodes hardware or software, and cutover support into production for a single event. Does not include Project Management.;0,001;0 

映射实体类定义:

public class AllnetArtikel
    {
        
        [Name("Nr.")]
        public string Nr { get; set; } = string.Empty;
        [Name("ALLNET-Artikelnummer")]
        public string AllnetArtiNr{ get; set; } = string.Empty;
        [Name("Hersteller-Artikelnummer")]
        public string HerstellerArtiNr{ get; set; } = string.Empty;
        [Name("Hersteller")]
        public string Hersteller{ get; set; } = string.Empty;
        [Name("Produktbezeichnung")]
        public string Produktbezeichnung{ get; set; } = string.Empty;
        [Name("EAN Nummer")]
        public string EAN{ get; set; } = string.Empty;
        [Name("Kategorieebene1")]
        public string Kategorie1{ get; set; } = string.Empty;
        [Name("Kategorieebene2")]
        public string Kategorie2{ get; set; } = string.Empty;
        [Name("Kategorieebene3")]
        public string Kategorie3{ get; set; } = string.Empty;
        [Name("HEK")]
        public decimal HEK{ get; set; }
        [Name("Artikelzustand")]
        public string Zustand{ get; set; } = string.Empty;
        [Name("UVP")]
        public decimal UVP{ get; set; }
        [Name("Produktbeschreibung")]
        public string Produktbeschreibung{ get; set; } = string.Empty;
        [Name("Gewicht")]
        [Default(-1)]
        public decimal Gewicht{ get; set; }
        [Name("Lagerbestand")]
        public int Lagerbestand { get; set; } 
    }

失败原因

  1. 未显式指定CSV分隔符:示例CSV使用分号;作为字段分隔符,CsvHelper默认使用逗号,拆分字段,导致字段拆分完全错误,修剪规则无法作用到正确的数值字段
  2. 数值类型转换器默认未开启修剪:部分版本CsvHelper的数值类型转换器会直接读取原始值转换,未自动处理残留空格

修复方案

调整配置代码如下即可解决问题:

using (TextReader reader = new StreamReader(datei))
{
    CsvConfiguration configuration = new CsvConfiguration(CultureInfo.GetCultureInfo("de-DE"));
    // 显式指定分隔符为分号
    configuration.Delimiter = ";";
    configuration.BadDataFound = null;
    configuration.TrimOptions = TrimOptions.Trim;
    
    // 给数值类型注册自动修剪的转换器,彻底兼容带空格的数值
    configuration.TypeConverterCache.AddConverter<int>(new Int32Converter { TrimValues = true });
    configuration.TypeConverterCache.AddConverter<decimal>(new DecimalConverter { TrimValues = true });

    using (var csv = new CsvReader(reader, configuration))
    {
        ArtikeldatenLieferant = csv.GetRecords<AllnetArtikel>().ToList();
    }
}

备用方案

如果调整配置后仍有个别字段转换失败,可以自定义转换器直接处理字段值:

// 自定义带修剪的int转换器
public class TrimmedIntConverter : Int32Converter
{
    public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
    {
        return base.ConvertFromString(text?.Trim(), row, memberMapData);
    }
}

// 实体属性上指定转换器
[Name("Lagerbestand")]
[ConvertUsing(typeof(TrimmedIntConverter))]
public int Lagerbestand { get; set; }

内容的提问来源于stack exchange,提问作者Marvin Klein

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:57:00