【问题标题】:Map empty Columns with CSVHelper使用 CSVHelper 映射空列
【发布时间】:2014-03-07 14:42:22
【问题描述】:

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

这可能吗?

谢谢

【问题讨论】:

标签: c# csvhelper


【解决方案1】:

您可以使用常量值在读写时始终默认字段的值。

    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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      如果我正确理解了您的问题,您的课程应该如下所示:

      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
      

      【讨论】:

      • 我猜,这是 OP 的意图,但这样的代码给出了 CsvHelper.Configuration.CsvConfigurationException: 'Empty' is not a property. Did you try to map a field by accident?
      猜你喜欢
      • 2021-12-21
      • 2015-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-01
      • 1970-01-01
      相关资源
      最近更新 更多