CSV Helper, игнорировать пустые значения - PullRequest
0 голосов
/ 10 июля 2020

Я использую CSVHelper для чтения в типы файлов csv:

1.

6000000,1,2020
6000001,1,2020
6000002,1,2020
6000003,1,2020
6000004,1,2020
6000000
6000001
6000002

Это моя модель:

public class Body
    {
        public long Id { get; set; }

        public int Semester { get; set; }

        public int Year { get; set; }
    }

Эта модель отлично работает с первым типом файлов. Но в случае второго выдает исключения. Я думаю, это потому, что в CSV нет полей для семестра и года. Есть ли способ игнорировать эти 2 дополнительных поля при чтении, которых нет во втором файле? Я не хочу создавать дополнительную модель только со свойством Id.

Мой метод чтения csv:

public List<T> ReadFile<T>(StreamReader stream)
        {
            using (var csv = new CsvReader(stream, CultureInfo.InvariantCulture))
            {
                csv.Configuration.HasHeaderRecord = false;
                var records = csv.GetRecords<T>().ToList();
                return records;
            }
        }

Итак, если бы я прочитал второй файл, то был бы возвращен список с объектами Body, но свойства Semester и Year будут пустыми или 0

1 Ответ

2 голосов
/ 10 июля 2020

OptionalAttribute: Из документации CSVHelper: «Игнорировать элемент при чтении, если не найдено подходящего имени поля».

Просто пометьте свою модель следующим образом:

public class Body
    {
        public long Id { get; set; }
        [Optional]
        public int Semester { get; set; }
        [Optional]
        public int Year { get; set; }
    }

Или используя ClassMap:

public class BodyMap : ClassMap<Body>
{
    public BodyMap()
    {
        Map(m => m.Id);
        Map(m => m.Semester).Optional();
        Map(m => m.Year).Optional();
    }
}

Затем добавьте следующее:

csv.Configuration.RegisterClassMap(new BodyMap());

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...