我有一個具有DateTime類型屬性的模型。從這個屬性中,當寫入csv文件和從csv文件讀取CsvHelper時,我希望在字符串中包含秒和微秒。自定義DateTime coverter返回null?
所以,我在這裏是如何通過擴展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);
}
}
走過來解決
模型看起來像這樣
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>();
}
}
我註冊了m班給讀者和作者。但問題是:
我可以使用轉換器成功寫入csv文件,但是當我嘗試從csv文件讀取時,它可以讀取其他屬性,但返回null作爲DateTime屬性。
那麼..我錯過了什麼?
編輯:
,如果有幫助:
這是代碼從csv文件閱讀:
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();
}
用DateTime.ParseExact()替換Convert.ToDateTime(text)並使用格式:「MM/dd/yyyy HH:mm:ss.fff」 – jdweng
什麼是自定義DateTime轉換器?這不會轉換任何東西,它只是一個簡單的調用'Convert.ToDateTime(text)'。這將使用當前語言環境的格式 –
'CsvDateTimeConverter'中的代碼似乎正常工作(如果我直接調用它)。也許這是轉換器的註冊問題?請參閱[C#小提琴](https://dotnetfiddle.net/ypQ5Nt) –