【问题标题】:Retrieving data from csv are 0 or null从 csv 检索数据为 0 或 null
【发布时间】:2019-08-22 18:09:26
【问题描述】:

我正在尝试将一些数据从 CSV 导入 c#。我面临的问题是数据为 0 或 null。虽然我用 CSV 标题映射他们的标题。

这是 csv 文件的一些照片,以及我使用以下代码调试时得到的照片。我做错了什么?

这是 CSV 的模型

 public class CsvModel
{
    [Name("EAN")]
    public string EAN { get; set; }
    [Name("Store Id")]
    public int StoreId { get; set; }
    [Name("Quantity")]
    public int Quantity { get; set; }
    [Name("Amount")]
    public string Amount { get; set; }
    [Name("Date")]
    public string Date { get; set; }
}

这就是我检索它的方式

         public ActionResult Index( IFormFile uploadedFile)
    {
        if (ModelState.IsValid)
        {
            List<CsvModel> m = new List<CsvModel>();

            if (uploadedFile != null && uploadedFile.Length > 0)
            {

                if (uploadedFile.FileName.EndsWith(".csv"))
                {
                    using (var reader = new StreamReader(uploadedFile.OpenReadStream()))
                    using (var csv = new CsvReader(reader))
                    {

                        csv.Configuration.RegisterClassMap<CsvHeaderMap>();
                        var records = csv.GetRecords<CsvModel>();
                        foreach (var r in records)
                        {
                            CsvModel o = new CsvModel();
                            o.Date = r.Date;
                            o.Amount = r.Amount;
                            m.Add(r);
                        }
                    }

                }
                else
                {
                    ModelState.AddModelError("File", "This file format is not supported");
                    return View();
                }
            }
            else
            {
                ModelState.AddModelError("File", "Please Upload Your file");
            }
        }
        return View();
    }

这就是我映射标题的方式

  public class CsvHeaderMap : ClassMap<CsvModel>
{
    public CsvHeaderMap()
    {
        Map(m => m.EAN).Name("EAN");
        Map(m => m.EAN).Name("Store Id");
        Map(m => m.EAN).Name("Quantity");
        Map(m => m.EAN).Name("Amount");
        Map(m => m.EAN).Name("Date");
    }
}

【问题讨论】:

    标签: c# csv asp.net-core .net-core csvhelper


    【解决方案1】:

    您的手动类映射覆盖了属性

    public class CsvHeaderMap : ClassMap<CsvModel>
    {
        public CsvHeaderMap()
        {
            Map(m => m.EAN).Name("EAN");
            Map(m => m.EAN).Name("Store Id");
            Map(m => m.EAN).Name("Quantity");
            Map(m => m.EAN).Name("Amount");
            Map(m => m.EAN).Name("Date");
        }
    }
    

    请注意您的图像中只有最后一张地图实际填充的方式。

    要么修复映射以映射到正确的属性

    public class CsvHeaderMap : ClassMap<CsvModel> {
        public CsvHeaderMap() {
            Map(m => m.EAN).Name("EAN");
            Map(m => m.StoreId ).Name("Store Id");
            Map(m => m.Quantity).Name("Quantity");
            Map(m => m.Amount).Name("Amount");
            Map(m => m.Date).Name("Date");
        }
    }
    

    或者完全删除,让系统从属性中自动计算出来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-11
      相关资源
      最近更新 更多