neden 'System.IO.StreamWriter' dan 'CsvHelper.ISerializer' a dönüştüremiyorum?


9

Bir CSV dosyası için insanların içeriğini yazmak ve daha sonra ihracat çalışırken, ancak ben bir yapı hatası alıyorum ve başarısız oluyor. hata:

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

Emin değilim neden bu şekilde yaptım emin değilim bu şekilde bir sürü kez yaptım.

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

Eğer düşünmek neden açıklayabilir misiniz gerektiğini dönüştürmek mümkün StreamWriteriçin ISerializer? StreamWriter.NET'in bir parçasıdır - belirli bir üçüncü taraf paketinden arabirimler uygulayamaz.
Jon Skeet

1
Bu, CsvHelper.CsvWriter(TextWriter)kapsamda olmadığını göstermektedir . Paketin doğru sürümünü alıp almadığınızı ve StreamWriternormal sınıf ( System.IO.StreamWriter) olduğunu bir kez daha kontrol edin . Tekrar CsvWriterkontrol etmek için "Tanıma Git" seçeneğini kullanın .
Jeroen Mostert

@JeroenMostert csvWriter'ı kontrol etmek istediniz mi? yaptım ve CsvHelper.Configuration kullanarak kullanan CSVhelper sınıfına aittir; CsvHelper.TypeConversion kullanarak; Sistem kullanma; System.Collections kullanarak; System.Collections.Generic kullanarak; System.Dynamic kullanarak; System.Globalization kullanarak; System.IO kullanarak; System.Threading.Tasks kullanarak;
Andy Stav

Evet, ancak derleyicinin size söylediği şey, CsvWriterbir ISerializerdönüşüm yapamayacağı için bir yapıcıyı çağırıyor ve başarısız oluyor. Bu seçmeliydim CsvWriterbir alan kurucuya TextWriterberi, StreamWriter(herhangi bir nedenle) yani ya kurucu eksik olduğunu, o devraldığı veya derleyici'nın aşırı yük çözünürlüğü bozuldu (biraz daha az muhtemel, ama daha garip şeyler olmuş).
Jeroen Mostert

Yanıtlar:


32

13.0.0 sürümünde bir değişiklik oldu. Yerelleştirmeyle ilgili birçok sorun oldu, bu nedenle @JoshClose, kullanıcıların CultureInfokullanmak istediklerini belirtmelerini gerektiriyor . Şimdi ve CultureInfoöğelerini oluştururken eklemeniz gerekir . https://github.com/JoshClose/CsvHelper/issues/1441CsvReaderCsvWriter

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

Not: CultureInfo.CurrentCulture önceki sürümlerde varsayılan değerdi.

Düşünmek

  • CultureInfo.InvariantCulture- Dosyanın hem yazılmasını hem de okunmasını kontrol ediyorsanız. Bu şekilde kullanıcının bilgisayarında hangi kültüre sahip olursa olsun çalışır.
  • CultureInfo.CreateSpecificCulture("en-US")- Kullanıcının kültüründen bağımsız olarak belirli bir kültür için çalışması gerekiyorsa .

Bana çok zaman kazandın, teşekkürler, David * v15.0.0 için çalışıyor
Konstantin Malikov
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.