2014-11-04 15 views
6

Używam CsvHelper do generowania pliku csv na podstawie List, ale chciałbym uniknąć zapisania jednej z wartości. Zgodnie z documentation użyłem CsvClassMap, aby określić pole, które chcę zignorować. Jednak wartość jest nadal zapisywana do pliku.CsvHelper ignorowanie nie działa

Oto moja klasa:

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

Oto moja 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(); 
    } 
} 

I to jest kod, który używam do generowania danych wyjściowych:

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(); 
} 

My moc wyjściowa jest następująca:

 
Id,FirstName,MiddleName,LastName 
1,Randall,Michael,Perry 
2,Marigold,Joanne,Mercibar 
3,Sven,Ergenfein,Olafsson 

Jak mogę go zatrzymać, aby przestać pisać MiddleName?

Odpowiedz

9

Klasa mapa musi być registered w czasie wykonywania w celu CsvHelper wiedzieć, aby wykorzystać go:

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

Należy również pamiętać, że w obecnej wersji, to don't need to explicitly ignore fields w mapie klasy (chociaż to się zmieni w przyszłości):

Ignoruj ​​

Obecnie ten nie jest używany. Mapowanie będzie mapować wyłącznie określone właściwości. W przyszłości będzie dostępna opcja automatycznego mapowania na mapie klasy, a wszystkie jawnie określone odwzorowania zastąpią automatycznie mapowane. Gdy tak się stanie, funkcja ignorowania zostanie użyta do zignorowania właściwości, która została automatycznie odwzorowana.

Mając to na uwadze, można również uprościć klasy mapę tak:

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

Nie wiem, dlaczego to było w dół przydatne. Nauczyłem się czegoś pożytecznego tutaj. Czy coś jest nie tak z odpowiedzią? – jsuddsjr

+0

Myślę, że to dlatego, że odpowiedział na własne pytanie natychmiast po wysłaniu go? – Benedict

+2

"Nie jest po prostu w porządku zadawać i odpowiadać na twoje własne pytanie, jest to wyraźnie zalecane": http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own -pytania/ –

Powiązane problemy