我想将 CSV 反序列化为对象,通过不同的列名称进行映射,如以下示例所示:
输入1
身份证号;姓名;文件
1;马修斯;555777
2;克拉丽丝;567890
输入2
"Id_Person";"First_Name";"电话"
3;“约翰”;“999-9999”
public class People
{
public int PersonId { get; set; }
public string Name { get; set; }
public string Doc { get; set; }
}
请注意,列名称随文件而变化,甚至可能会丢失列。
我想将“Id”和“Id_Person”映射到 PersonId 属性,依此类推。
怎么做?
最佳答案
实际上找到了解决我问题的东西:CsvHelper
设置:
public sealed class PessoaCSVMap : ClassMap<Pessoas>
{
public PessoaCSVMap()
{
Map(m => m.NomeCompleto).Name("Nome", "Name");
Map(m => m.Documento).Name("Documento", "Doc", "CPF");
Map(m => m.Email1).Name("Email", "Email1", "E-mail", "E-mail1");
Map(m => m.PessoaId).Ignore();
}
}
使用:
const string CSV = "Nome;Email;bleu\nMatheus;<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="751814011d1000065b19141610071114351018141c195b161a185b1707" rel="noreferrer noopener nofollow">[email protected]</a>;blau\nClarice;null;null";
CsvReader csv = new CsvReader(new StringReader(CSV));
csv.Configuration.RegisterClassMap<PessoaCSVMap>();
csv.Configuration.Delimiter = ";";
csv.Configuration.HeaderValidated = null;
csv.Configuration.MissingFieldFound = null;
List<Pessoas> pessoas = csv.GetRecords<Pessoas>().ToList();
关于c# - 有没有办法将 CSV 反序列化为对象,通过不同的列名称进行映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48301302/