私はDateTime型のプロパティを持つモデルを持っています。このプロパティから、csvファイルに書き込むときとcsvファイルthourgh CsvHelperから読み込むときに、秒とマイクロ秒を文字列に含めたいと思います。カスタムDateTimeカバレッジがnullを返していますか?
だから私はこちらのモデルは、この
public class MyModel
{
// ..... removed other properties
public DateTime MyDateTime {get; set};
}
のように見え、CsvClassMapperこの
public sealed class CsvMap : CsvClassMap<MyModel>
{
public CsvMap()
{
Map(m => m.MyDateTime).TypeConverter<CsvDateTimeConverter>();
}
}
のように見えます
DefaultTypeConverter
public class CsvDateTimeConverter : DefaultTypeConverter
{
private const string DateStringFormat = "MM/dd/yyyy HH:mm:ss.fff";
public override object ConvertFromString(TypeConverterOptions options, string text)
{
if (string.IsNullOrEmpty(text)) return null;
return Convert.ToDateTime(text);
}
public override string ConvertToString(TypeConverterOptions options, object value)
{
if (value == null) return "";
var dateTime = (DateTime) value;
return dateTime.ToString(DateStringFormat);
}
}
を拡張することにより、溶液のところに来ていますか
私はクラスmを登録しました読者と作家にp。しかし、問題は:
私は正常にコンバータを使用してcsvファイルに書き込むことができますが、私はcsvファイルから読み取ろうとすると、他のプロパティを読み取ることができますが、DateTimeプロパティのnullを返します。
私は何が欠けていますか?
EDITED:
それは場合に役立ちます:
using (TextReader reader = new StreamReader(filePath))
{
var csv = new CsvReader(reader);
csv.Configuration.RegisterClassMap<CsvMap>();
csv.Configuration.Encoding = Encoding.UTF8;
return csv.GetRecords<MyModel>().ToList();
}
Convert.ToDateTime(text)をDateTime.ParseExact()に置き換え、 "MM/dd/yyyy HH:mm:ss.fff"の形式を使用します。 – jdweng
カスタムDateTimeコンバータは何ですか?これは何も変換しません、それは 'Convert.ToDateTime(text)'への単純な呼び出しです。これは現在のロケールのフォーマットを使用します –
'CsvDateTimeConverter'のコードが(私が直接呼び出すと)正しく動作するようです。たぶんそれはコンバータの登録に問題がありますか? [C#Fiddle](https://dotnetfiddle.net/ypQ5Nt)を参照してください。 –