【发布时间】:2012-10-03 10:30:27
【问题描述】:
我正在使用AutoMapper 将一组Models 映射到ViewModels。一切正常,但我必须为我创建的每个模型/视图模型一遍又一遍地做一件事。我必须将某个属性从(例如)String 映射到 Int。
所以我的映射现在看起来像这样:
Mapper.CreateMap<ModelOne, ModelOneViewModel>()
.ForMember (d => d.SomeProperty, opt => opt.ResolveUsing(t => Convert.ToString(t.SomeProperty)));
Mapper.CreateMap<ModelOneViewModel, ModelOne>()
.ForMember (d => d.SomeProperty, opt => opt.ResolveUsing(t => Convert.ToInt32(t.SomeProperty)));
Mapper.CreateMap<ModelTwo, ModelTwoViewModel>()
.ForMember (d => d.SomeProperty, opt => opt.ResolveUsing(t => Convert.ToString(t.SomeProperty)));
// ... etc
有没有办法告诉 automapper 当它从我的Models 类映射到我的ViewModels 类时,它应该始终将SomeProperty 映射到String?
反之亦然,当它从ViewModels 映射回Models 时,是否可以告诉automapper 始终将属性SomeProperty 映射回Int32?
【问题讨论】:
-
要清楚,您希望转换基于
ModelOne的属性名称(或视图模型反之亦然)?那应该是ModelOne.SomeProperty还是任何名称为SomeProperty的属性? -
@wal ModelXXX 和 ModelXXXViewModel 具有相同的属性名称。它总是被称为
SomeProperty。在ModelXXX中,它始终是Int32,在ModelXXXViewModel中,它始终是String。 -- 所以当我从ModelXXX映射到ModelXXXViewModel时,它应该映射SomeProperty从Int32到String。 - 当我 map 从 ModelXXXViewModel to ModelXXX 时,它应该始终将SomeProperty从String转换为Int32。 -
@w00 Custom Type Converters 不是你要找的吗?
-
根据医生链接,是否可以接受添加一般转换(不仅仅是针对该属性)?例如:
Mapper.CreateMap<string, int>().ConvertUsing(Convert.ToInt32); -
@Trustme-I'maDoctor 我认为这可能很有用。我实际上是在尝试将
byte[]转换为string(转换为base64),反之亦然。一个string(base64) 回到byte[]。出于某种原因,我的Convert方法还没有被触发。但是我认为当我开始工作时它可以解决我的问题。您能否将其添加为答案(以及额外信息,如果您有的话),以便稍后在没有其他答案时接受。
标签: c# automapper