【发布时间】:2020-05-06 15:11:27
【问题描述】:
在我的应用程序中,我正在获取 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
对于某些值,它可以转换但将值视为日期时间
{[{"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);
}
}
}
【问题讨论】:
标签: c# json .net-core json.net choetl