使用 AutoMapper 如何在映射之前验证源值?
Using AutoMapper how can a source value be validated before being mapped?
我有一个从 DateTime 到字符串定义的 AutoMapper 映射,我在其中使用 ISO-8601 日期格式并截断时间部分。
我想对源值严格执行 DateTime.Kind == DateTimeKind.Utc,这样如果源日期不是 DateTimeKind.Utc 我希望映射失败,即通过抛出异常。
这是解决这个问题的正确方法吗?如果是这样,实现这一目标的正确方法是什么?
这是我的映射配置文件:
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")
);
我有一个从 DateTime 到字符串定义的 AutoMapper 映射,我在其中使用 ISO-8601 日期格式并截断时间部分。
我想对源值严格执行 DateTime.Kind == DateTimeKind.Utc,这样如果源日期不是 DateTimeKind.Utc 我希望映射失败,即通过抛出异常。
这是解决这个问题的正确方法吗?如果是这样,实现这一目标的正确方法是什么?
这是我的映射配置文件:
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")
);