Automapper条件语言映射
问题描述:
我有一个包含成员变量两种语言领域模型,是这样的:Automapper条件语言映射
public class Resource
{
public string SwedishName;
public string EnglishName;
}
为了展示我有一个简化的模型,被输送到一个JSON序列:
[JsonObject]
public class JsonResource
{
[JsonProperty]
public string Name;
}
这些映射与automapper像这样:
Mapper.CreateMap<Resource, JsonResource>()
.ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.SwedishName));
我的问题是,如果这可以用更有条件的方式来完成,具体取决于要求哪种语言?我最初的想法,是沿着这些线:
string lang = "en";
json = Mapper.Map<Resource, JsonResource>(resource, lang)
虽然,似乎不可能有几个相同类型的映射?
目前林倾向于,只是定义为其他语言的另一个相同的演示模型:
if (lang == "en")
json = Mapper.Map<Resource, EnglishJsonResource>(resource)
else
json = Mapper.Map<Resource, JsonResource>(resource)
这是一个可行的解决方案,或者是有没有更好的办法?
答
我不会创建单独的类。使用AfterMap
:
Mapper.CreateMap<Resource, JsonResource>()
.AfterMap((r,b) => r.Name = isEnglish ? b.EnglishName : b.SwedishName);
isEnglish
是在您的应用程序的条件,但是你需要使用它。
答
您可以创建两个不同的类EngMapper和SimpleMapper,它们将使用initMapping方法实现IMapper接口,例如,您可以创建工厂以根据您的语言获取正确的映射器。所以最后你的映射将被分开为不同的语言(这在我看来更好)。
或者您可以在.MapFrom()中实现同样的效果: .ForMember(dest => dest.Name,opt => opt.MapFrom(src => isEnglish?src.EnglishName:src.SwedishName)) – Dima 2012-04-17 10:28:10