2014-11-04 10 views
6

List tabanlı bir csv dosyası oluşturmak için CsvHelper kullanıyorum, ancak değerlerden birini yazmamaktan kaçınmak istiyorum. documentation uyarınca, yok saymak istediğim alanı belirtmek için CsvClassMap kullandım. Ancak, dosyaya hala değer yazılıyor. İşte CsvHelper çalışmıyor

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

benim CsvClassMap geçerli:: İşte

benim sınıftır

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

Ve bu çıktıyı üretmek için kullanıyorum kodudur:

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

Benim çıktı şu şekildedir:

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

MiddleName'u yazmayı nasıl durdurabilirim? geçerli sürümünde, sınıf haritasında don't need to explicitly ignore fields (bu değişecek olsa

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

şunu not:

cevap

9

sınıf haritası kullanmayı bilmek CsvHelper için sırayla zamanında registered olmalıdır gelecek):

Şu anda bu kullanılmaz

geçiyoruz. Eşleme, yalnızca belirttiğiniz özellikleri eşler. Gelecekte, bir sınıf haritasının otomatik olarak haritalanması için bir seçenek olacak ve açıkça belirtilen tüm eşlemeler, otomatik eşlenenleri geçersiz kılacaktır. Bu olduğunda, otomatik haritalanmış bir özelliği yoksaymak için göz ardı edilir. Bunun üzerine

akılda, ayrıca bu kadar sevdiği sınıf haritayı basitleştirmek olabilir:

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

bu aşağı-seçildi neden emin. Burada yararlı bir şey öğrendim. Yanıtla ilgili bir sorun mu var? – jsuddsjr

+0

Sanırım, sorduktan hemen sonra kendi sorusunu cevapladı mı? – Benedict

+2

"Kendi sorunuzu sormak ve cevaplamak sadece Tamam değil, açık bir şekilde teşvik edilir": http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own -sorular / –