为什么我不能从“ System.IO.StreamWriter”转换为“ CsvHelper.ISerializer”?


9

尝试将人们的内容写入CSV文件,然后将其导出,但是我遇到了构建错误及其失败。错误是:

cannot convert from 'System.IO.StreamWriter' to 'CsvHelper.ISerializer'

不知道为什么会这样,除非我确定我以这种方式完成了很多次。

private void ExportAsCSV()
{
    using (var memoryStream = new MemoryStream())
    {
        using (var writer = new StreamWriter(memoryStream))
        {
            using (var csv = new CsvHelper.CsvWriter(writer))
            {
                csv.WriteRecords(people);
            }

            var arr = memoryStream.ToArray();
            js.SaveAs("people.csv",arr);
        }
    }
}

您能否阐明为什么您认为应该能够从转换StreamWriterISerializerStreamWriter是.NET本身的一部分-它无法通过特定的第三方程序包实现接口。
乔恩·斯基特

1
这表明CsvHelper.CsvWriter(TextWriter)不在范围内。仔细检查您是否获得了正确的软件包版本,这StreamWriter是通常的类(System.IO.StreamWriter)。使用“转到定义” CsvWriter仔细检查。
Jeroen Mostert

@JeroenMostert您的意思是检查csvWriter吗?我做了,它属于使用CsvHelper.Configuration使用的CSVhelper类;使用CsvHelper.TypeConversion; 使用系统;使用System.Collections; 使用System.Collections.Generic; 使用System.Dynamic; 使用System.Globalization; 使用System.IO; 使用System.Threading.Tasks;
安迪·斯塔夫

是的,但是编译器告诉您的是,它正在调用采用的CsvWriter构造函数ISerializer,并且由于没有转换而失败。它应该选择CsvWriter一个采用的构造函数TextWriter,因为它StreamWriter继承自,所以要么该构造函数丢失(无论出于何种原因),要么编译器的重载解析被破坏(可能性较小,但发生了更奇怪的事情)。
Jeroen Mostert

Answers:


29

版本13.0.0发生了重大变化。本地化存在很多问题,因此@JoshClose要求用户指定CultureInfo他们要使用的本地化。现在,您需要CultureInfo在创建CsvReader和时包括在内CsvWriterhttps://github.com/JoshClose/CsvHelper/issues/1441

private void ExportAsCSV()
{
    using (var memoryStream = new MemoryStream())
    {
        using (var writer = new StreamWriter(memoryStream))
        {
            using (var csv = new CsvHelper.CsvWriter(writer, System.Globalization.CultureInfo.CurrentCulture)
            {
                csv.WriteRecords(people);
            }

            var arr = memoryStream.ToArray();
            js.SaveAs("people.csv",arr);
        }
    }
}

注意: CultureInfo.CurrentCulture以前版本中的默认设置。

考虑

  • CultureInfo.InvariantCulture-如果您控制文件的写入和读取。这样,无论用户在计算机上使用哪种文化,它都将起作用。
  • CultureInfo.CreateSpecificCulture("en-US")-如果您需要它来适应特定的文化,而与用户的文化无关。

您为我节省了很多时间,谢谢,大卫* v15.0.0的作品
Konstantin Malikov
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.