c# - 有没有办法将 CSV 反序列化为对象,通过不同的列名称进行映射?

标签 c# csv asp.net-core-2.0

我想将 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/

相关文章:

ajax - 添加 [FromBody] 属性导致 404

c# - .NET Core 中 WebRequest 的重定向

iis - 如何在 .Net Core 2 中为 IIS 发布定义自定义 web.config?

c# - 从串口读取值

php - 如何使用 php 和 codeigniter 在 mysql 中导入 CSV 文件?

python - 获取png文件名称的第一个单词和字符

php - 将 MySQL 下载为 CSV 文件时出现问题

c# - 如何使用 setBinding 函数(而不是 XAML 代码)在 C# 代码中绑定(bind)按钮的背景颜色

c# - 从 Visual Studio 运行应用程序时性能下降

c# - 如何将值从一种形式传递到另一种形式?