使用AutoMapper进行双向转换

时间:2011-01-06 20:41:50

标签: c# automapper

我有我的viewmodel类以及我的wcf服务类(单独的项目)。我需要将viewmodel类转换为wcf类,反之亦然。目前我使用以下方法:

public static class ExtensionMethods
{
    public static object To<T>(this object source)
    {
        // create the map
        Mapper.CreateMap(source.GetType(), typeof (T)); 

        // if the source is a list
        if(source is IEnumerable)
        {
            return Mapper.Map(source, source.GetType(), typeof (List<T>)); 
        }

        // return the mapping 
        return (T) Mapper.Map(source, source.GetType(), typeof (T)); 
    }

}

// converting the wcf class to viewmodel
var orders = (List<OrderStatusViewModel>) _orderStatusServiceClient.GetRecentOrders().To<OrderStatusViewModel>();
// converting the viewmodel to the wcf class 
var order = (Order) orderStatusViewModel.To<Order>();  

这是最好的方法吗?请记住,我必须在两个方向上执行此操作,即viewmodel =&gt; wcf类和wcf类=&gt;视图模型。

1 个答案:

答案 0 :(得分:0)

要注意的一件事是一遍又一遍地重新定义地图。我已经把代码搞砸了。

由于您的方法不依赖于任何特定类型,我建议删除CreateMap调用并将Map调用更改为DynamicMap。

另外,如果你的输入是你的通用参数类型是IEnumerable,那么DynamicMap就不需要了你的if