왜 '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);
        }
    }
}

당신은 당신이 생각하는 이유를 명확히 할 수 있어야 에서 변환 할 수 StreamWriterISerializer? StreamWriter.NET 자체의 일부입니다. 특정 타사 패키지의 인터페이스를 구현할 수 없습니다.
Jon Skeet

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 사용;
Andy Stav

그렇습니다. 그러나 컴파일러가 말한 CsvWriter것은을 취하는 생성자를 호출하고 ISerializer변환이 없기 때문에 실패 한다는 것입니다 . 그것은 포착해야 CsvWriter소요 생성자 TextWriter때문에 StreamWriter(어떤 이유) 그래서 하나의 생성자가없는 것으로, 그에서 상속 또는 컴파일러의 과부하 해상도가 고장 (조금 덜 가능성을하지만, 별난 일들이 일어난).
Jeroen Mostert

답변:


29

버전 13.0.0에서 주요 변경 사항이있었습니다. 현지화에는 많은 문제가 있었으므로 @JoshClose에서는 사용자 CultureInfo가 사용할 것을 지정해야합니다 . 이제 포함해야 CultureInfo만들 때 CsvReaderCsvWriter. 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);
        }
    }
}

참고 : CultureInfo.CurrentCulture 이전 버전에서는 기본값이었습니다.

치다

  • CultureInfo.InvariantCulture-파일의 쓰기와 읽기를 모두 제어하는 ​​경우. 그렇게하면 사용자가 컴퓨터에서 어떤 문화를 갖고 있는지에 관계없이 작동합니다.
  • CultureInfo.CreateSpecificCulture("en-US")- 사용자의 문화와 무관 하게 특정 문화 를 위해 일해야하는 경우 .

David * works v15.0.0
Konstantin Malikov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.