В моем приложении я получаю поток csv и пытаюсь динамически преобразовать поток Csv в JSON JToken. Здесь я не буду знать столбцы в CSV, поэтому не могу определить сопоставление. Чтобы преобразовать этот поток в JSON, я использую ChoETL. Json CsvReader, но он не может преобразовать какое-то значение, поскольку он обрабатывает строку как тип DatTime. Вот пример функции, созданной для репликации проблемы
public static void ConvertCsvStream()
{
JToken result = null;
string delemeter = ",";
string csvText = "\"Invoice Number\"\n\"1583-03\"\n\"1589-00\"";
try
{
Stream stream = new MemoryStream(Encoding.UTF8.GetBytes(csvText));
using (StreamReader reader = new StreamReader(stream))
{
using (var csv = new ChoCSVReader(reader).WithFirstLineHeader().WithDelimiter(delemeter))
{
result = JToken.FromObject(csv);
}
}
}
catch(Exception ex)
{
}
//return JToken.FromObject(sb.ToString());
}
Это вызывает ошибку
Can't convert '1589-00' value from 'System.String' type to 'System.DateTime' type
Для некоторых значений он может преобразовывать, но с учетом значений как DateTime
{[{"Invoice Number": "1583-02-01T00:00:00"}, {"Invoice Number": "1583-03-01T00:00:00"}]}
Может ли кто-нибудь помочь с этим? Я не смогу создать модель для csv, так как я не буду знать столбцы
Edit
после обновления пакета до новой версии, я смог создать метод для преобразования потока csv в JToken
public static JToken ConvertCsvStream(Stream stream,string delemeter)
{
if (string.IsNullOrWhiteSpace(delemeter))
delemeter = ",";
using (StreamReader reader = new StreamReader(stream))
{
using (var csv=new ChoCSVReader(stream).QuoteAllFields().WithFirstLineHeader().WithDelimiter(delemeter))
{
return JToken.FromObject(csv);
}
}
}