CSV к списку объектов

В настоящее время я использую ServiceStack.Text для десериализации CSV в список объектов.

Моя модель

public class UploadDocument
{
    [DataMember(Name = "Patient")]
    public string Patient { get; set; }

    [DataMember(Name = "Patient First Name")]
    public string PatientFirstName { get; set; }

    [DataMember(Name = "Patient Last Name")]
    public string PatientLastName { get; set; }

    [DataMember(Name = "Email")]
    public string Email { get; set; }
}

Код C#

var csvData = System.IO.File.ReadAllText(fileName).FromCsv<List<UploadDocument>>();

Это работает хорошо, даже если в CSV отсутствует какой-либо столбец, т. Е. Если в CSV содержится только имя пациента, имя пациента все равно загружает данные в объекте с нулевым значением для фамилии пациента и электронной почты.

Но он выдает ошибку, когда есть дополнительный столбец без заголовка

Patient,    Patient First Name, Patient Last Name,  Email
XXX,        YYY,                ZZZZZ,              nwerwer@yahoo.com,      QWER
XXX,        YYY,                ZZZZZ,              nwerwerwe@yahoo.com,    QWER
XXX,        YYY,                ZZZZZ,              nwerwe@yahoo.com,       QWER

Как мне справиться с этим?

Здесь ожидается, что даже если количество столбцов меньше или имеется дополнительная строка без заголовка, соответствующий столбец (заголовок CSV и свойство класса) должен быть загружен без каких-либо проблем.

Примечание. Порядок столбцов CSV будет отличаться для каждого файла.

1 ответ

Вы пытались пропустить первую строку?

var results = csv.SubString(csv.IndexOf('\n')).FromCsv<List<UploadDocument>>();

Но он выдает ошибку, когда есть дополнительный столбец без заголовка

Но поскольку ваш CSV-файл недействителен, гораздо лучше исправить ваш источник .csv чтобы убедиться, что он содержит правильное количество заголовков в качестве полей, прежде чем пытаться десериализовать его, например:

var validCsv = csv.LeftPart('\n') + ",MissingName\n" + csv.RightPart('\n');
var results = validCsv.SubString(csv.IndexOf('\n')).FromCsv<List<UploadDocument>>();
Другие вопросы по тегам