【发布时间】:2023-04-04 09:11:01
【问题描述】:
我在使用 csvhelper 编写新的 csv 文件时遇到 stackoverflow 异常。上线引发异常:
csv.WriteRecords(listToSave)
最初认为它归结为使用通用List,但也尝试使用具体列表,并且可以使用任何大小的列表和任何类型的列表复制它。
所有列表都是使用实体框架创建的 .ToList() 也尝试过 AsEnumerable() 等...
不确定我是否遗漏了一些非常明显的东西?
任何帮助解决,非常感谢。
public string SaveTemporaryCsvToFileSystem<T>(IEnumerable<T> listToSave, string fileName)
{
//Store in folder
string folder = "C:\\inetpub\\wwwroot\\Content\\EmailOutput\\Temporary Files\\";
string filePath = fileName + DateTime.Now.Day + DateTime.Now.Month + DateTime.Now.Year + ".CSV";
if(!Directory.Exists(folder))
{
Directory.CreateDirectory(folder);
}
using (TextWriter writer = new StreamWriter(folder + filePath))
{
var csv = new CsvWriter(writer);
csv.WriteRecords(listToSave);
}
var zippedFile = ZipSecurely(folder + filePath);
DeleteUnsecureFile(folder + filePath);
return zippedFile;
}
【问题讨论】:
-
T类型是实体框架代理类型吗?如果是这样,那么(只是预感)也许 CsvWriter 会尝试序列化一个集合属性(例如“Children”),然后在这样做时,它会序列化每个具有相应“Parent”的 Child,它会继续序列化再次具有“Parent”的 Parent孩子”,然后发生无限循环。 -
谢谢彼得,这也是我最初的想法,但正在传递的列表中没有子实体,所以看起来不是这样
-
我认为您需要显示您要保存的类型的定义。
-
你肯定要显示定义,没有它你就没有minimal reproducible example。
标签: c# asp.net entity-framework csvhelper