2014-11-04 86 views
6

我正在使用CsvHelper生成基於List的csv文件,但我想避免編寫其中一個值。根據documentation,我用CsvClassMap來指定我想要忽略的字段。但是,該值仍被寫入文件。CsvHelper忽略不工作

這裏是我的類:

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,FirstName,MiddleName,LastName 
1,Randall,Michael,Perry 
2,Marigold,Joanne,Mercibar 
3,Sven,Ergenfein,Olafsson 

我怎樣才能讓它停止編寫MiddleName

回答

9

類映射必須是registered在運行時爲了CsvHelper知道使用它:

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

還要注意的是,在當前版本中,您don't need to explicitly ignore fields在類圖(雖然這將改變未來):

忽略

目前這種不被使用。映射只會映射您指定的屬性。將來會有一個選項在類映射中自動映射,任何明確聲明的映射都會覆蓋自動映射的映射。發生這種情況時,將忽略忽略被自動映射的屬性。

考慮到這一點,你也可以簡化您的類圖如下所示:

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"); 
    } 
} 
+0

不知道爲什麼,這是下調投票。我在這裏學到了有用的東西答案有問題嗎? – jsuddsjr 2015-01-23 23:48:49

+0

我想這是因爲他發佈後立即回答自己的問題? – Benedict 2015-05-01 02:28:47

+2

「問及回答你自己的問題不僅僅是可以的,而是明確的鼓勵」:http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own -questions / – 2015-05-04 19:38:50