我正在使用CsvHelper
生成基于List
的csv文件,但我想避免编写其中一个值。根据{{3}},我使用CsvClassMap
来指定我要忽略的字段。但是,该值仍在写入文件。
这是我的班级:
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
?
答案 0 :(得分:15)
运行时类映射必须为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");
}
}
答案 1 :(得分:1)
您可以使用以下标签:[Ignore]
例如:
//Ignored value
[Ignore]
double value0 = 0;
//Serializable value
[Name("value 1")]
double value1 = 0;