CsvHelper忽略不起作用

时间:2014-11-04 15:44:39

标签: c# .net csvhelper

我正在使用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

2 个答案:

答案 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;