Próbuję zapisać zawartość osób w pliku CSV, a następnie wyeksportować go, jednak pojawia się błąd kompilacji i jego błąd. błąd jest następujący:
cannot convert from 'System.IO.StreamWriter' to 'CsvHelper.ISerializer'
Nie jestem pewien, dlaczego tak się dzieje, chyba że jestem pewien, że robiłem to w ten sposób wiele razy.
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
doISerializer
?StreamWriter
jest częścią samego .NET - nie może implementować interfejsów z określonego pakietu innej firmy.CsvHelper.CsvWriter(TextWriter)
to, że nie jest objęty zakresem. Dokładnie sprawdź, czy otrzymujesz odpowiednią wersję pakietu, i toStreamWriter
jest zwykła klasa (System.IO.StreamWriter
). Użyj „Idź do definicji”,CsvWriter
aby dwukrotnie sprawdzić.CsvWriter
konstruktor, który pobieraISerializer
i kończy się niepowodzeniem, ponieważ nie ma konwersji. Powinien był wybraćCsvWriter
konstruktor, który bierzeTextWriter
, ponieważStreamWriter
dziedziczy po tym, więc albo tego konstruktora brakuje (z jakiegokolwiek powodu), albo rozdzielczość przeciążenia kompilatora jest zepsuta (trochę mniej prawdopodobne, ale dziwniejsze rzeczy się zdarzyły).Odpowiedzi:
Nastąpiła przełomowa zmiana w wersji 13.0.0. Wystąpiło wiele problemów z lokalizacją, więc @JoshClose wymaga od użytkowników określenia,
CultureInfo
którego chcą użyć. Musisz teraz uwzględnićCultureInfo
przy tworzeniuCsvReader
iCsvWriter
. https://github.com/JoshClose/CsvHelper/issues/1441Uwaga:
CultureInfo.CurrentCulture
był domyślny w poprzednich wersjach.Rozważać
CultureInfo.InvariantCulture
- Jeśli kontrolujesz zarówno zapis, jak i odczyt pliku. W ten sposób będzie działać bez względu na kulturę użytkownika na swoim komputerze.CultureInfo.CreateSpecificCulture("en-US")
- Jeśli potrzebujesz, aby działał dla określonej kultury , niezależnie od kultury użytkownika.źródło