我的CSV具有动态列数,例如:
Cannot implicitly convert type 'System.Collections.Generic.List<ContosoUniversity.Models.Instructor>' to 'System.Linq.IQueryable<ContosoUniversity.Models.Instructor>'. An explicit conversion exists (are you missing a cast?)
我想使用Jsefa(或任何其他建议)将其反序列化为以下形式的类:
001, a ,b
002, a, b, c
003, a
Jsefa是否支持它?
答案 0 :(得分:1)
由于Google中的搜索短语“jsefa csv dynamic number of columns”将此问题作为热门评分返回,因此答案似乎可能是“否”。
我怀疑这不能很好地满足您的要求,而且非常难看,但鉴于默认情况下字段是可选的,您可以执行以下操作:
@CsvDataType
public class MyCsv {
@CsvField(pos=0)
private String id
@CsvField(pos=1)
private String data1
@CsvField(pos=2)
private String data2
@CsvField(pos=3)
private String data3
@CsvField(pos=4)
private String data4
@CsvField(pos=5)
private String data5
...
@CsvField(pos=N)
private String dataN
}
并且CSV中没有值的字段只有null
。
为了更清洁的解决方案,我怀疑你需要实现自己的CsvLowLevelDeserializer
,它可能会执行与CsvLowLevelDeserializerImpl
相同的大部分事情,但对于最后一个字段,它可以看起来超出分隔符以获得多个值。
最后,CSV是一种非常简单的格式,可以根据您的需要编写自己的解析器,这可能是最直接的选择。