2017-09-25 3 views
1

私はCsvHelperライブラリを使用してIEnumerable < Person>からCSVファイルを生成しています。ここでPersonは基本クラスです。CsvHelper - 空白を含むヘッダーを書き込む

public class Person 
{ 
    public string DisplayName { get; set; } 
    public int Age { get; set; } 
} 

は私が引用されたヘッダ、すなわち、代わりのDisplayNameのを書く必要があり、結果のファイル内の列には、「表示名」でなければなりません。

どうすればいいですか?

+1

C#の?他に何か? – doctorlove

答えて

1

CsvClassMapを作成します。

void Main() 
{ 
    using (var stream = new MemoryStream()) 
    using (var writer = new StreamWriter(stream)) 
    using (var reader = new StreamReader(stream)) 
    using (var csv = new CsvWriter(writer)) 
    { 
     var records = new List<Person> 
     { 
      new Test { DisplayName = "one", Age = 1}, 
      new Test { DisplayName = "two", Age = 2 }, 
     }; 

     csv.Configuration.RegisterClassMap<PersonMap>(); 
     csv.WriteRecords(records); 

     writer.Flush(); 
     stream.Position = 0; 

     Console.WriteLine(reader.ReadToEnd()); 
    } 
} 

public class Person 
{ 
    public string DisplayName { get; set; } 
    public int Age { get; set; } 
} 

public sealed class PersonMap : CsvClassMap<Person> 
{ 
    public PersonMap() 
    { 
     Map(m => m.DisplayName).Name("Display Name"); 
     Map(m => m.Age); 
    } 
} 

出力:

Display Name,Age 
one,1 
two,2 
+0

これは一般的な方法になりますか? – nawfal

+0

ジェネリックの意味は? –

+0

申し訳ありませんが、私が言っていたのは、複合語プロパティのスペースを含む方法*は、カスタムマッパーを書く代わりに汎用/自動(任意のオブジェクト用)で処理できるかどうかです。例えば、 'AccountType'プロパティはヘッダー' Account Type'に対応する必要があります。 CsvReaderでプロパティを設定することでこれを読み取ることができます。しかし、私たちには書いてもらえません。 – nawfal

関連する問題