我当前正在使用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列顺序将有所不同
答案 0 :(得分:0)
您是否尝试过跳过第一行?
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>>();