尝试将GTFS导入我的自定义类型。 C#字段是TimeSpan,我正尝试使用内联TimeSpanConverter并缺少某些内容。我不需要花哨的JSON示例示例。只是需要知道如何在线使用转换器。
我研究了一下,寻找了例子,尝试了一个继承自TimeSpanConverter的类。只是对于导入时到TimeSpan的简单内联字符串(08:00:00)而言,还没有为jason complexe数据类型做好准备
var timeSpanConverter = new CsvHelper.TypeConversion.TimeSpanConverter();
Map(m => m.trip_id).Name("trip_id");
Map(m => m.arrival_time).Name("arrival_time").ConvertUsing(timeSpanConverter.ConvertFromString());
Map(m => m.departure_time).Name("departure_time");
Class字段是
公共TimeSpan到达时间{get;组; } 公开的TimeSpan出发时间{组; }
失败的行是 Map(m => m.arrival_time).Name(“ arrival_time”)。ConvertUsing(timeSpanConverter.ConvertFromString());
错误是: SCS7036没有给出与“ TimeSpanConverter.ConvertFromString(string,IReaderRow,MemberMapData)”的所需形式参数“ text”相对应的参数。
希望使用正确的语法来继续前进。
谢谢大家
史蒂夫
答案 0 :(得分:0)
CsvHelper已为要转换为的大多数类型(包括TimeSpan
)注册了默认转换器。如果您对默认设置感到满意,则无需执行任何操作。
public static void Main(string[] args)
{
using (MemoryStream stream = new MemoryStream())
using (StreamWriter writer = new StreamWriter(stream))
using (StreamReader reader = new StreamReader(stream))
using (CsvReader csv = new CsvReader(reader))
{
writer.WriteLine("trip_id,arrival_time,departure_time");
writer.WriteLine("101,08:00:00,09:00:00");
writer.Flush();
stream.Position = 0;
var records = csv.GetRecords<Foo>().ToList();
Console.ReadKey();
}
}
public class Foo
{
public int trip_id { get; set; }
public TimeSpan arrival_time { get; set; }
public TimeSpan departure_time { get; set; }
}
如果您想做一些超出默认值的事情,则可以创建自己的转换器并使用它。
public static void Main(string[] args)
{
using (MemoryStream stream = new MemoryStream())
using (StreamWriter writer = new StreamWriter(stream))
using (StreamReader reader = new StreamReader(stream))
using (CsvReader csv = new CsvReader(reader))
{
writer.WriteLine("trip_id,arrival_time,departure_time");
writer.WriteLine("101,08:00:00,09:00:00");
writer.Flush();
stream.Position = 0;
csv.Configuration.RegisterClassMap<FooMap>();
var records = csv.GetRecords<Foo>().ToList();
Console.ReadKey();
}
}
public class Add30SecondsConverter : TimeSpanConverter
{
public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
var timespan = (TimeSpan)base.ConvertFromString(text, row, memberMapData);
return timespan.Add(new TimeSpan(0, 0, 30));
}
}
public class FooMap : ClassMap<Foo>
{
public FooMap()
{
Map(m => m.trip_id);
Map(m => m.arrival_time).TypeConverter<Add30SecondsConverter>();
Map(m => m.departure_time);
}
}
public class Foo
{
public int trip_id { get; set; }
public TimeSpan arrival_time { get; set; }
public TimeSpan departure_time { get; set; }
}