J'essaie d'écrire le contenu de personnes dans un fichier CSV, puis de l'exporter, mais je reçois une erreur de génération et son échec. l'erreur est:
cannot convert from 'System.IO.StreamWriter' to 'CsvHelper.ISerializer'
Je ne sais pas pourquoi cela se produit, à moins que je sois certain de l'avoir fait de cette façon de nombreuses fois.
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
fait partie de .NET lui-même - il ne peut pas implémenter d'interfaces à partir d'un package tiers spécifique.CsvHelper.CsvWriter(TextWriter)
n'est pas dans la portée. Vérifiez que vous obtenez la bonne version du package, et c'estStreamWriter
la classe habituelle (System.IO.StreamWriter
). Utilisez "Aller à la définition"CsvWriter
pour revérifier.CsvWriter
constructeur qui prend unISerializer
, et échoue car il n'y a pas de conversion. Il aurait dû choisir leCsvWriter
constructeur qui prend unTextWriter
, car il enStreamWriter
hérite, donc soit ce constructeur est manquant (pour une raison quelconque) soit la résolution de surcharge du compilateur est cassée (un peu moins probable, mais des choses plus étranges se sont produites).Réponses:
Il y avait un changement de rupture avec la version 13.0.0. Il y a eu de nombreux problèmes avec la localisation, donc @JoshClose oblige les utilisateurs à spécifier ce
CultureInfo
qu'ils veulent utiliser. Vous devez maintenant inclureCultureInfo
lors de la créationCsvReader
etCsvWriter
. https://github.com/JoshClose/CsvHelper/issues/1441Remarque:
CultureInfo.CurrentCulture
était la valeur par défaut dans les versions précédentes.Considérer
CultureInfo.InvariantCulture
- Si vous contrôlez à la fois l'écriture et la lecture du fichier. De cette façon, cela fonctionnera quelle que soit la culture de l'utilisateur sur son ordinateur.CultureInfo.CreateSpecificCulture("en-US")
- Si vous en avez besoin pour travailler pour une culture particulière , indépendamment de la culture de l'utilisateur.la source