使用CSVHelper映射空列

时间:2014-03-07 14:42:22

标签: c# csvhelper

我使用的是CSVHelper,我有以下MAP:

public class UserModelCsvMapper : CsvClassMap<UserModel> {
  public override void CreateMap() {
    Map(x => x.Name).Name("Name");
    Map(x => x.Email).Name("Email");
    Map(x => x.Linked).Name("Linked");
  } // CreateMap
} // UserModelCsvMapper

我想在我的CSV上有更多2列:

Country > UK (Always UK)

Code > "" (Always an empty string)

这可能吗?

谢谢

3 个答案:

答案 0 :(得分:0)

您可以使用“常量”值在读取和写入时始终将字段值默认为默认值。

    Map(x => x.Country).Name("Country").Constant("UK");
    Map(x => x.Code).Name("Code").Constant("");

文档:https://joshclose.github.io/CsvHelper/examples/configuration/class-maps/constant-value

答案 1 :(得分:0)

据我所知,您通常不能(确实是老文章),作者建议here在您的班级中创建固定属性。那可能是最好的解决方案。扩展(通过继承或直接添加额外的属性)您的类,并填充固定值。

还有另一个选项,它可能在特定情况下有效,并且正在使用Map()(请参阅here),这将允许您尽我所能执行Map().Name("Code")之类的操作在这些字段按声明的值顺序移动时告诉它们,在您的示例中这是可以的,但是如果您先声明Code,它将在生成的.csv中填充Name的值(我曾尝试使用{{ 1}},但无济于事。而且我看不到映射固定值的方法(执行类似Map().Name("Code").Index(0)的操作会产生错误)。

答案 2 :(得分:-2)

如果我理解你的问题,你的课程应该是这样的:

public class UserModelCsvMapper : CsvClassMap<UserModel> {
  public override void CreateMap() {
    Map(x => x.Name).Name("Name");
    Map(x => x.Email).Name("Email");
    Map(x => x.Linked).Name("Linked");
    Map(x => "UK").Name("Country");
    Map(x => "").Name("Code");
  } // CreateMap
} // UserModelCsvMapper