17

CsvHelperに基づいて csv ファイルを生成するために使用していますListが、値の 1 つを書き込むことは避けたいと思います。ドキュメントに従って、CsvClassMap無視するフィールドを指定するためにa を使用しました。ただし、値はまだファイルに書き込まれています。

これが私のクラスです:

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }
}

これが私のものCsvClassMapです:

public sealed class PersonClassMap : CsvClassMap<Person>
{
    public PersonClassMap()
    {
        Map(m => m.Id).Index(0).Name("Id");
        Map(m => m.FirstName).Index(1).Name("First Name");
        Map(m => m.LastName).Index(2).Name("Last Name");

        Map(m => m.MiddleName).Ignore();
    }
}

そして、これは私が出力を生成するために使用しているコードです:

var persons = new List<Person>
{
    new Person {Id = 1, FirstName = "Randall", MiddleName = "Michael", LastName = "Perry"},
    new Person {Id = 2, FirstName = "Marigold", MiddleName = "Joanne", LastName = "Mercibar"},
    new Person {Id = 3, FirstName = "Sven", MiddleName = "Ergenfein", LastName = "Olafsson"}
};

using (var csvWriter = new CsvWriter(textWriter))
{
    csvWriter.WriteRecords(persons);
    textWriter.Flush();
}

私の出力は次のとおりです。

ID、名、ミドルネーム、姓
1、ランドール、マイケル、ペリー
2、マリーゴールド、ジョアン、メルシバル
3、スヴェン、エルゲンファイン、オラフソン

の書き込みを停止するにはどうすればよいMiddleNameですか?

4

2 に答える 2

22

がクラス マップを使用できるようにするには、クラス マップを実行時に登録する必要があります。CsvHelper

using (var csvWriter = new CsvWriter(textWriter))
{
    csvWriter.Configuration.RegisterClassMap<PersonClassMap>();
    csvWriter.WriteRecords(persons);
    textWriter.Flush();
}

また、現在のバージョンでは、クラス マップのフィールドを明示的に無視する必要がないことに注意してください(ただし、これは将来変更される予定です)。

無視

現在、これは使用されていません。マッピングは、指定したプロパティのみをマッピングします。将来的には、クラス マップ内で自動マッピングするオプションがあり、明示的に記述されたマッピングは、自動マッピングされたものをオーバーライドします。これが発生すると、自動的にマップされたプロパティを無視するために ignore が使用されます。

それを念頭に置いて、次のようにクラス マップを単純化することもできます。

public sealed class PersonClassMap : CsvClassMap<Person>
{
    public PersonClassMap()
    {
        Map(m => m.Id).Index(0).Name("Id");
        Map(m => m.FirstName).Index(1).Name("First Name");
        Map(m => m.LastName).Index(2).Name("Last Name");
    }
}
于 2014-11-04T15:44:39.323 に答える