对于我的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一步到位地处理转换。
答案 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);