чому я не можу конвертувати з "System.IO.StreamWriter" в "CsvHelper.ISerializer"?


9

Намагаюся записати вміст людей на CSVfile, а потім експортувати його, однак я отримую помилку збірки та її збій. помилка:

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

Чи не могли б ви пояснити , чому ви думаєте , що ви повинні бути в змозі конвертувати StreamWriterв ISerializer? StreamWriterє частиною самого .NET - він не може реалізовувати інтерфейси з певного стороннього пакету.
Джон Скіт

1
Це говорить про те, що CsvHelper.CsvWriter(TextWriter)це не стосується. Перевірте, чи отримуєте ви правильну версію пакету, і StreamWriterце звичайний клас ( System.IO.StreamWriter). CsvWriterДля подвійної перевірки використовуйте "Перейти до визначення" .
Єроен Мостерт

@JeroenMostert Ви мали намір перевірити csvWriter? я зробив і належить до класу CSVhelper, який використовує використання CsvHelper.Configuration; використання CsvHelper.TypeConversion; за допомогою системи; за допомогою System.Collections; використовуючи System.Collections.Generic; за допомогою System.Dynamic; використання System.Globalization; за допомогою System.IO; використання System.Threading.Tasks;
Енді Став

Так, але те, що говорить вам компілятор, це те, що він викликає CsvWriterконструктор, який приймає ISerializer, і не працює, оскільки немає перетворення. Він повинен був обрати CsvWriterконструктор, який приймає TextWriter, оскільки він StreamWriterуспадковує його, тому або той конструктор відсутній (з будь-якої причини), або роздільна здатність компілятора порушена (трохи менш вірогідні, але більш дивні речі відбулися).
Єроен Мостерт

Відповіді:


29

У версії 13.0.0 відбулася переломна зміна. Існує багато проблем з локалізацією, тому @JoshClose вимагає від користувачів уточнювати, які CultureInfoвони хочуть використовувати. Тепер вам потрібно включити CultureInfoпід час створення CsvReaderі CsvWriter. https://github.com/JoshClose/CsvHelper/isissue/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
Костянтин Маліков,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.