【发布时间】:2016-07-06 21:02:32
【问题描述】:
当 Automapper 将转换为对象的 DateTime 转换为字符串时,它使用 ToString() 方法返回由区域性定义的格式的字符串。如何配置它以使其始终映射到 ISO 字符串?
var data = new Dictionary<string, object>
{
{ "test", new DateTime(2016, 7, 6, 9, 33, 0) }
};
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<DateTime, string>().ConvertUsing(dt => dt.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ"));
});
var mapper = config.CreateMapper();
Assert.AreEqual("2016-07-06T07:33:00Z", mapper.Map<string>(data["test"]));
Assert.AreEqual("2016-07-06T07:33:00Z", mapper.Map<IDictionary<string, string>>(data)["test"]);
第一个断言很好,但第二个失败:
Result Message:
Expected string length 20 but was 17. Strings differ at index 0.
Expected: "2016-07-06T07:33:00Z"
But was: "6-7-2016 09:33:00"
-----------^
【问题讨论】:
-
如果您想为 all 日期时间执行此操作,您只需创建一个TypeConverter。如果您想对特定值执行此操作,请在这些属性上使用
ForMember语法。 -
@stuartd 我试过的是: Mapper.CreateMap
().ConvertUsing(x => x.ToString("u"));但是,这似乎从未被称为 -
这看起来可行。你能设置一个失败的测试用例吗?
标签: c# automapper