Отобразить пустые столбцы с помощью 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

Я хотел бы иметь больше 2 столбцов на моем CSV:

Country > UK (Always UK)

Code > "" (Always an empty string)

Это возможно?

Благодарю вас

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

Насколько я понимаю, вы, как правило, не можете, действительно (и это старый пост) автор предлагает здесь создать фиксированное свойство в вашем классе. Это, наверное, лучшее решение; расширьте (либо посредством наследования, либо путем прямого добавления дополнительных свойств) свой класс и заполните его фиксированными значениями.

Есть еще один вариант, который может работать в определенных случаях, и он использует Map()(см. здесь), это позволит вам сделать что-то вродеMap().Name("Code") однако, насколько я могу судить, пока эти поля появляются в том порядке, в котором объявлены значения сдвига. В вашем примере это будет нормально, но если вы сначала объявили Код, оно будет заполнено значением Name в сгенерированном.csv (Я пробовал использовать Map().Name("Code").Index(0)но безрезультатно). И я не вижу способа сопоставить фиксированное значение (делая что-то вродеMap(m => "UK").Name("Country") генерирует ошибку).

Если я правильно понял ваш вопрос, ваш класс должен выглядеть так:

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
Другие вопросы по тегам