在我的CSV中,主文件由","分隔。这是正常的。但是,在我的一些记录中,它们由" |"分隔,这就是问题所在。
我的模特:
public class Inventory
{
public string Year { get; set; }
public string Make { get; set; }
public string Model { get; set; }
public string Trim { get; set; }
public string Body { get; set; }
public ICollection<Images> ImageURLS { get; set; }
}
public class Images
{
public string ImageURLS { get; set; }
}
带有伪代码的我的控制器:
我需要读取记录,如果它看到|,停止,添加到图像列表,跳过|并重复直到结束。
public ActionResult Inventory()
{
var listInventory = new List<Inventory>();
try
{
var reader = new CsvReader(new StreamReader(Server.MapPath("~/9712.txt")));
var invList = reader.GetRecords<Inventory>();
foreach (var i in invList)
{
var vehicle = new Inventory();
vehicle.Make = i.Make;
bool split = true;
while (split)
{
read the string
if ("|") then stop.
add to vehicle.ImageURLS.Add(string);
skip ("|")
}
listInventory.Add(vehicle);
}
}
catch
{
}
return View(listInventory);
}
答案 0 :(得分:0)
我知道这是一个老问题,但您需要做的是创建一个继承自CsvClassMap的类(根据CsvHelper文档)。在其中,您需要创建自定义转换器。它应该看起来像:
public sealed class MappingClass : CsvClassMap<Inventory>
{
public MappingClass()
{
AutoMap();
Map(m => m.ImageURLS).ConvertUsing(r => r.GetField("Images")
.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries)
.Select(x => new Image{ImageURLS = x}).ToList());
}
}