Сопоставление пустых столбцов с помощью CSVHelper

Я использую CSVHelper, и у меня есть следующая КАРТА:

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)

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

Спасибо


person Miguel Moura    schedule 07.03.2014    source источник
comment
Последний пост в этой теме может оказаться полезным. github.com/JoshClose/CsvHelper/issues/209   -  person Mike Perrenoud    schedule 07.03.2014


Ответы (3)


Вы можете использовать значение «Константа», чтобы всегда использовать значение поля по умолчанию при чтении и записи.

    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

person Weston Walker    schedule 20.03.2019

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

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

person d219    schedule 30.07.2020

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

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
person doug144    schedule 14.10.2014
comment
Я предполагаю, что это было намерением OP, но такой код дает CsvHelper.Configuration.CsvConfigurationException: 'Empty' is not a property. Did you try to map a field by accident? - person Marcel; 10.06.2020