我正在寻找一种方式来获得AutoMapper指定DateTimeKind我所有的日期Utc使用的时候ProjectTo。我环顾四周,找到了一些解决方案,但似乎都没有效果:
cfg.CreateMap<DateTime, DateTime>().ConvertUsing(i => DateTime.SpecifyKind(i, DateTimeKind.Utc));
cfg.CreateMap<DateTime?, DateTime?>().ConvertUsing(i => DateTime.SpecifyKind(i.Value, DateTimeKind.Utc));
Run Code Online (Sandbox Code Playgroud)
或者
cfg.CreateMap<DateTime, DateTime>().ProjectUsing(i => new DateTime(i.Year, i.Month, i.Day, i.Hour, i.Minute, i.Second, DateTimeKind.Utc));
cfg.CreateMap<DateTime?, DateTime?>().ProjectUsing(i => new DateTime(i.Value.Year, i.Value.Month, i.Value.Day, i.Value.Hour, i.Value.Minute, i.Value.Second, DateTimeKind.Utc));
Run Code Online (Sandbox Code Playgroud)
或者
cfg.CreateMap<DateTime, DateTime>().ConstructProjectionUsing(i => new DateTime(i.Year, i.Month, i.Day, i.Hour, i.Minute, i.Second, DateTimeKind.Utc));
cfg.CreateMap<DateTime?, DateTime?>().ConstructProjectionUsing(i => new DateTime(i.Value.Year, i.Value.Month, i.Value.Day, i.Value.Hour, i.Value.Minute, i.Value.Second, DateTimeKind.Utc));
Run Code Online (Sandbox Code Playgroud)
我也试过这个,但在对文档进行了一些挖掘之后,似乎 ResolveUsing 在使用时不起作用 ProjectTo
cfg.ForAllPropertyMaps(map => (map.SourceType == typeof(DateTime?) || map.SourceType == typeof(DateTime)), (map, expression) =>
{
expression.ResolveUsing(o =>
{
var date = o as DateTime;
DateTime.SpecifyKind(date, DateTimeKind.Utc);
return date;
});
});
Run Code Online (Sandbox Code Playgroud)
我是在以错误的方式做这件事,还是有更好的方法来尝试实现这一目标?