自动映射:映射层次结构

时间:2012-03-07 10:47:37

标签: automapper

对于我的ASP.NET Web应用程序,我目前正在使用Automapper从模型(DTO)映射 - >查看模型。我的视图模型具有所有字符串属性,因为我使用的是Mustache,一种无逻辑模板引擎。

我正在向我的网站公开API(通过JSON等),而我喜欢要做的是执行以下映射:

Model -> Base ViewModel -> Web ViewModel

然后,可以为我的API序列化“Base ViewModel”(例如,使用货币的数值)。从那里,我将为我的“Web ViewModel”做一个简单的映射(例如,使用格式化的货币值字符串,链接等)。

问题是,我似乎无法让这个工作。定义Model -> Base ViewModel映射和Base ViewModel -> Web ViewModel映射seperately是不够的,似乎让我的Web视图模型,如果我明确添加Model -> Web ViewModel映射,Automapper只是试图直接映射,跳过我依赖的中间步骤。

可以/应该使用Automapper吗?我意识到我可能只是明确地进行两次顺序转换以获得正确的结果,但我想我会问这里是否可以让Automapper一步到位地处理转换。

1 个答案:

答案 0 :(得分:0)

嗯,我不相信(或说实话,我不知道怎么样)这是可能的。

但你可以试试

创建您的映射

Model.CreateMap<Model, BaseViewModel>()...
Model.CreateMap<BaseViewModel, WebViewModel>()...

并尝试这样的通用助手,根据需要进行更改

 public static void TwoStepMapping<TSource, TIntermediate, TDest>(TSource source, TDest dest) where TIntermediate : new()
            {
                Mapper.Map(Mapper.Map(source, new TIntermediate()), dest);
            }

致电:

TwoStepMapping<Model, BaseViewModel, WebViewModel>(model, webViewModel);