Beim Versuch, den Inhalt von Personen in eine CSV-Datei zu schreiben und diese dann zu exportieren, wird jedoch ein Erstellungsfehler angezeigt, der fehlschlägt. Der Fehler ist:
cannot convert from 'System.IO.StreamWriter' to 'CsvHelper.ISerializer'
Ich bin mir nicht sicher, warum dies geschieht, es sei denn, ich bin mir sicher, dass ich es viele Male so gemacht habe.
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
zuISerializer
?StreamWriter
ist Teil von .NET selbst - es kann keine Schnittstellen von einem bestimmten Paket eines Drittanbieters implementieren.CsvHelper.CsvWriter(TextWriter)
nicht im Geltungsbereich liegt. Stellen Sie sicher, dass Sie die richtige Version des Pakets erhalten, und dasStreamWriter
ist die übliche Klasse (System.IO.StreamWriter
). Verwenden Sie "Gehe zu Definition", um diesCsvWriter
zu überprüfen.CsvWriter
Konstruktor aufruft, der eine benötigtISerializer
, und fehlschlägt, da keine Konvertierung erfolgt. Es sollte denCsvWriter
Konstruktor ausgewählt haben, der a nimmtTextWriter
, da er davonStreamWriter
erbt, sodass entweder dieser Konstruktor fehlt (aus welchem Grund auch immer) oder die Überlastungsauflösung des Compilers fehlerhaft ist (etwas weniger wahrscheinlich, aber seltsamere Dinge sind passiert).Antworten:
Mit Version 13.0.0 gab es eine bahnbrechende Änderung. Es gab viele Probleme mit der Lokalisierung, daher müssen Benutzer bei @JoshClose angeben, welche
CultureInfo
sie verwenden möchten. Sie müssen jetztCultureInfo
beim ErstellenCsvReader
und einbeziehenCsvWriter
. https://github.com/JoshClose/CsvHelper/issues/1441Hinweis:
CultureInfo.CurrentCulture
war die Standardeinstellung in früheren Versionen.Erwägen
CultureInfo.InvariantCulture
- Wenn Sie sowohl das Schreiben als auch das Lesen der Datei steuern. Auf diese Weise funktioniert es unabhängig von der Kultur, die der Benutzer auf seinem Computer hat.CultureInfo.CreateSpecificCulture("en-US")
- Wenn Sie es benötigen, um für eine bestimmte Kultur zu arbeiten , unabhängig von der Benutzerkultur.quelle