使用AutoMapper,可以直接先写一个公用方法
/// <summary>
/// 对象到对象转换
/// </summary>
/// <typeparam name="T">待转换类型</typeparam>
/// <param name="source">源类型</param>
/// <returns>转换结果</returns>
public static T MapTo<T>(this object source)
{
if (source == null)
{
return default(T);
}
Mapper.Initialize(cfg => cfg.CreateMap(source.GetType(), typeof(T)));
return Mapper.Map<T>(source);
}
这种情况下,第一次运行正常,但是之后会出现以下异常:
因此我们需要判断对应的对象转换是否已经存在:如下图所示:
/// <summary>
/// 验证对象到对象是否存在
/// </summary>
/// <param name="srcType"></param>
/// <param name="destType"></param>
/// <returns></returns>
private static bool ConfigExist(Type srcType, Type destType)
{
return Mapper.Configuration.FindMapper(new TypePair(srcType, destType)) ==null;
}
然而又出现以下异常:
也就是说,如果我们要验证是否存在必须初始化,在这里就出现一个死循环--“初始化前必须验证是否存在,然而验证是否存在必须初始化”。
因为上面这个问题,使我纠结了很久,最终才找到以下解决方案:
在项目Global.asax文件中Application_Start里面添加AutoMapper的空初始化,这样就可以解决以上问题:
Mapper.Initialize(ctx => { });