使用AutoMapper如何在映射前验证源值?



我定义了一个从DateTime到string的AutoMapper映射,其中我使用ISO-8601日期格式并截断时间部分。

我想严格执行DateTime。Kind == DateTimeKind。如果源日期不是DateTimeKind。我希望映射失败,即抛出异常。

这样做对吗?如果是这样,实现这一目标的正确方法是什么?

这是我的映射配置文件:

public DateTimeMappingProfile()
{
// TODO: Ideally we would throw an exception if DateTime.Kind is not UTC.
CreateMap<DateTime, string>()
.ConvertUsing(dt => dt.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture));
CreateMap<string, DateTime>()
.ConvertUsing(s => DateTime.ParseExact(s, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal));
}

您可以使用接受映射函数(而不是表达式)的ConvertUsing过载。

void ConvertUsing(Func<TSource, TDestination, TDestination> mappingFunction)

这个允许抛出一个Exception

CreateMap<DateTime, string>()
.ConvertUsing((source, destination) => source.Kind == DateTimeKind.Utc
? source.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)
: throw new Exception("DateTime must be of kind Utc")
);

相关内容

  • 没有找到相关文章

最新更新