尝试<T>使用 csv 从 CSV 创建列表时无法创建抽象类。获取记录()



我正在尝试创建一个通用方法,使我能够将CSV文档解析为我选择的对象。

一切似乎都正常,但执行 csv 后的结果。GetRecords() 方法为空,响应的内部异常是"无法创建抽象类的实例"。

我也尝试过使用 csv。枚举记录(记录);并获得相同的结果。

public class ImportManager
{        
[Ignore]
public string FileSeperator { get; set; }
[Ignore]
public string Filename { get; set; }
public IEnumerable<T> ParseFile<T>() where T : class
{
using (var reader = new StreamReader(this.Filename))
using (var csv = new CsvReader(reader))
{
csv.Configuration.Delimiter = this.FileSeperator;
csv.Configuration.HasHeaderRecord = true;
var results = csv.GetRecords<T>();
return results;
}
}
}
public class MyObject : ImportManager
{
public string Field1 { get; set; }
public DateTime Field2 { get; set; }
public int Field3 { get; set; }
public List<MyObject> LoadFile()
{
var response = ParseFile<MyObject>();
return response.ToList<MyObject>();
}
}
MyObject moObjList= new MyObject() { Filename = "MyFileName.txt", FileSeperator = "|" };
var results = moObjList.LoadFile();

帮助!

我相信在csv.GetRecords<T>()中添加ToList()可能会解决您的问题。GetRecords<T>()执行延迟加载。 它不会尝试枚举记录,直到您调用return response.ToList<MyObject>();此时StreamReader已释放。

public class ImportManager
{        
[Ignore]
public string FileSeperator { get; set; }
[Ignore]
public string Filename { get; set; }
public IEnumerable<T> ParseFile<T>() where T : class
{
using (var reader = new StreamReader(this.Filename))
using (var csv = new CsvReader(reader))
{
csv.Configuration.Delimiter = this.FileSeperator;
csv.Configuration.HasHeaderRecord = true;
var results = csv.GetRecords<T>().ToList();
return results;
}
}
}

最新更新