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