从 csv 中检索数据为 0 或 null
Retrieving data from csv are 0 or null
我正在尝试将一些数据从 CSV 文件导入到 C# 中。我面临的问题是数据为 0 或 null。尽管我将他们的 headers 映射到 CSV headers.
这是 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();
}
这就是我映射 headers
的方式
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");
}
}
您的手动 class 映射覆盖了属性
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");
}
}
或者完全删除它,让系统从属性中自动计算出来。
我正在尝试将一些数据从 CSV 文件导入到 C# 中。我面临的问题是数据为 0 或 null。尽管我将他们的 headers 映射到 CSV headers.
这是 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();
}
这就是我映射 headers
的方式 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");
}
}
您的手动 class 映射覆盖了属性
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");
}
}
或者完全删除它,让系统从属性中自动计算出来。