2014-11-04 89 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