por que não consigo converter de 'System.IO.StreamWriter' para 'CsvHelper.ISerializer'?

9

Tentando gravar o conteúdo das pessoas em um arquivo CSV e exportá-lo, no entanto, estou recebendo um erro de compilação e sua falha. o erro é:

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

Não sei por que isso está acontecendo, a menos que tenha certeza de que já fiz dessa maneira várias vezes.

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);
        }
    }
}
Andy Stav
fonte
Você poderia esclarecer por que acha que deve poder converter de StreamWriterpara ISerializer? StreamWriterfaz parte do próprio .NET - não pode implementar interfaces de um pacote de terceiros específico.
Jon Skeet
11
Isso sugere que CsvHelper.CsvWriter(TextWriter)não está no escopo. Verifique se você está obtendo a versão correta do pacote, e essa StreamWriteré a classe usual ( System.IO.StreamWriter). Use "Ir para definição" CsvWriterpara verificar novamente.
Jeroen Mostert 17/01
@JeroenMostert você quis verificar csvWriter? eu fiz e pertence à classe CSVhelper que usa usando CsvHelper.Configuration; using CsvHelper.TypeConversion; using System; using System.Collections; using System.Collections.Generic; using System.Dynamic; using System.Globalization; using System.IO; using System.Threading.Tasks;
Andy Stav 17/01
Sim, mas o que o compilador está dizendo é que ele está invocando o CsvWriterconstrutor que recebe uma ISerializere está falhando, pois não há conversão. Deveria ter escolhido o CsvWriterconstrutor que leva a TextWriter, já que o StreamWriterherda, para que o construtor esteja ausente (por qualquer motivo) ou a resolução de sobrecarga do compilador seja quebrada (um pouco menos provável, mas coisas mais estranhas aconteceram).
Jeroen Mostert

Respostas:

29

Houve uma alteração de última hora na versão 13.0.0. Houve muitos problemas com a localização, então o @JoshClose exige que os usuários especifiquem o CultureInfoque desejam usar. Agora você precisa incluir CultureInfoao criar CsvReadere CsvWriter. https://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);
        }
    }
}

Nota: CultureInfo.CurrentCulture era o padrão nas versões anteriores.

Considerar

  • CultureInfo.InvariantCulture- Se você controla a escrita e a leitura do arquivo. Dessa forma, funcionará independentemente da cultura que o usuário tenha no computador.
  • CultureInfo.CreateSpecificCulture("en-US")- Se você precisar trabalhar para uma cultura específica , independente da cultura do usuário.
David Specht
fonte
você me salvou muito tempo, obrigado, David * trabalha para a versão 15.0.0
Konstantin Malikov