Csv 流到 JSON 的转换使用 ChoETL.Json 失败

Csv stream to JSON conversion using ChoETL.Json failing

在我的应用程序中,我正在获取 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 创建模型,因为我不知道列

编辑

将包升级到新版本后,我能够创建一种将 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);
                }
            }
        }

这是库中的一个错误,使用自动类型发现将“1583-03”视为日期时间。请使用最新的 (1.2.0.1) nuget 包进行修复。

这是工作示例

string csvText = "\"Invoice Number\"\n\"1583-03\"\n\"1589-00\"";

StringBuilder json = new StringBuilder();
using (var r = ChoCSVReader.LoadText(csvText)
    .WithFirstLineHeader()
    .QuoteAllFields()
    )
{
    using (var w = new ChoJSONWriter(json))
        w.Write(r);
}
Console.WriteLine(json.ToString());

输出:

[
 {
  "Invoice Number": "1583-03"
 },
 {
  "Invoice Number": "1589-00"
 }
]