0

ヘッダー 'EMAIL' を含む csv ファイルを読み込もうとしていますが、「フィールド 'Email' が CSV ファイルに存在しません」という CsvMissingFieldException がスローされ続けます。

処理するように CSVreader をセットアップしました-

csvReader.Configuration.IsHeaderCaseSensitive = false;

しかし、私はまだ同じ問題を抱えています。誰かが回避策を知っていますか? または、なぜ構成が機能しないのですか?

私のユーティリティクラスでは:

public static IEnumerable<T> CSVreader<T>(string fileName)
        {
            using (var fileReader = File.OpenText(fileName))
            using (var csvReader = new CsvHelper.CsvReader(fileReader))
            { 
                csvReader.Configuration.IsHeaderCaseSensitive = false;
                csvReader.Configuration.RegisterClassMap<OptOutClassMap>();

                while (csvReader.Read())
                {
                    var record = csvReader.GetRecord<T>();
                    yield return record;
                }
            }
        }

私のクラスマップクラスでは:

public string Email { get; set; }

public class CustomClassMap : CsvHelper.Configuration.CsvClassMap<CustomMap>
    {
        public override void CreateMap()
        {
            Map(m => m.Email);  
        }

    }
4

1 に答える 1

0

正しい ClassMap を使用していないようです。上記のコードから、次の行:

csvReader.Configuration.RegisterClassMap<OptOutClassMap>();

次のようにする必要があります。

csvReader.Configuration.RegisterClassMap<CustomClassMap>();

変更されたコードは期待どおりに機能します。

static void Main(string[] args)
{
    var records = CSVreader<Record>("TextFile1.csv");            
}

public class Record
{
    public string Email { get; set; }
}

public class CustomClassMap : CsvHelper.Configuration.CsvClassMap<Record>
{
    public override void CreateMap()
    {
        Map(m => m.Email);
    }

}

public static IEnumerable<T> CSVreader<T>(string fileName)
{
    using (var fileReader = File.OpenText(fileName))
    using (var csvReader = new CsvHelper.CsvReader(fileReader))
    { 
        csvReader.Configuration.IsHeaderCaseSensitive = false;
        csvReader.Configuration.RegisterClassMap<CustomClassMap>();

        while (csvReader.Read())
        {
            var record = csvReader.GetRecord<T>();
            yield return record;
        }
    }
}
于 2014-06-25T18:44:11.907 に答える