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