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

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

0 голосов
/ 15 февраля 2019

В настоящее время я использую 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 Ответ

0 голосов
/ 15 февраля 2019

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

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>>();
...