将CSV数据转换为JSON -CSVHELPER
我的数据在Excel中:
id _npi_link_id dtime _dow congestion_cost vkt _delay_time vol _type anes length eed_lim v_speed
4706 3372355 1 2 0 2.08 0 11 Council Arterial 3 189 50 45.44
4708 3372355 1 2 0 0.38 0 2 Council Arterial 3 189 50 48
我试图将ID分开并将其余数据分开为JSON..I遵循这个示例,但我在JSON中获得了空的费用。
我的代码:
csvhelper_sample
public class GeoFeatures
{
public string? id { get; set; }
public Json? Json { get; set; }
}
public class Json
{
public string? GeoFeatures { get; set; }
}
public class FooMap : ClassMap<GeoFeatures>
{
public FooMap()
{
Map(m => m.id);
Map(m => m.Json).TypeConverter<JsonConverter<Json>>();
}
}
public class JsonConverter<T> : DefaultTypeConverter
{
public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
return JsonConvert.DeserializeObject<T>(text);
}
public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
{
return JsonConvert.SerializeObject(value);
}
}
program.cs
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
IgnoreBlankLines = true,
HasHeaderRecord = true,
HeaderValidated = null,
MissingFieldFound = null,
ShouldSkipRecord = record => string.IsNullOrEmpty(record.ToString()),
};
using (var reader = new StreamReader("Z:\\tmp\\test3.csv"))
using (var csv = new CsvReader(reader, config))
{
csv.Read();
csv.ReadHeader();
var list = csv.GetRecords<GeoFeatures>().ToList();
Console.WriteLine(list.Count);
}
尝试2
我也尝试了一个变体,但仅获取每个ID记录。
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
IgnoreBlankLines = true,
HasHeaderRecord = true,
HeaderValidated = null,
MissingFieldFound = null,
ShouldSkipRecord = record => string.IsNullOrEmpty(record.ToString()),
};
using (var reader = new StreamReader("Z:\\tmp\\test3.csv"))
using (var csv = new CsvReader(reader, config))
{
csv.Read();
csv.ReadHeader();
var length = csv.HeaderRecord.Count();
while (csv.Read())
{
var record = csv.GetRecord<dynamic>();
// Do something with the record.
Console.WriteLine(record.id);
}
}
My data in excel:
id _npi_link_id dtime _dow congestion_cost vkt _delay_time vol _type anes length eed_lim v_speed
4706 3372355 1 2 0 2.08 0 11 Council Arterial 3 189 50 45.44
4708 3372355 1 2 0 0.38 0 2 Council Arterial 3 189 50 48
I am trying to parse id separate and rest of the data as json..I followed this example but I get empty feilds in Json.
My code:
CSVHelper_Sample
public class GeoFeatures
{
public string? id { get; set; }
public Json? Json { get; set; }
}
public class Json
{
public string? GeoFeatures { get; set; }
}
public class FooMap : ClassMap<GeoFeatures>
{
public FooMap()
{
Map(m => m.id);
Map(m => m.Json).TypeConverter<JsonConverter<Json>>();
}
}
public class JsonConverter<T> : DefaultTypeConverter
{
public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
return JsonConvert.DeserializeObject<T>(text);
}
public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
{
return JsonConvert.SerializeObject(value);
}
}
Program.cs
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
IgnoreBlankLines = true,
HasHeaderRecord = true,
HeaderValidated = null,
MissingFieldFound = null,
ShouldSkipRecord = record => string.IsNullOrEmpty(record.ToString()),
};
using (var reader = new StreamReader("Z:\\tmp\\test3.csv"))
using (var csv = new CsvReader(reader, config))
{
csv.Read();
csv.ReadHeader();
var list = csv.GetRecords<GeoFeatures>().ToList();
Console.WriteLine(list.Count);
}
Try 2
I have also tried a variation but only get id for each record.
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
IgnoreBlankLines = true,
HasHeaderRecord = true,
HeaderValidated = null,
MissingFieldFound = null,
ShouldSkipRecord = record => string.IsNullOrEmpty(record.ToString()),
};
using (var reader = new StreamReader("Z:\\tmp\\test3.csv"))
using (var csv = new CsvReader(reader, config))
{
csv.Read();
csv.ReadHeader();
var length = csv.HeaderRecord.Count();
while (csv.Read())
{
var record = csv.GetRecord<dynamic>();
// Do something with the record.
Console.WriteLine(record.id);
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论