【问题标题】:StackOverflow Exception CSVHelper WriterStackOverflow 异常 CSVHelper 编写器
【发布时间】: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


【解决方案1】:

我的问题是我想写的类没有无参数构造函数。

【讨论】:

    【解决方案2】:

    当我保存的类型具有Uri 属性时,我遇到了这个问题。看来,System.Uri 类的结构会导致一些递归。

    您的类型是否有任何非基本类型的属性?

    【讨论】:

      猜你喜欢
      • 2012-06-21
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多