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是在您的应用程序的条件,但是你需要使用它。

+1

或者您可以在.MapFrom()中实现同样的效果: .ForMember(dest => dest.Name,opt => opt.MapFrom(src => isEnglish?src.EnglishName:src.SwedishName)) – Dima 2012-04-17 10:28:10

您可以创建两个不同的类EngMapper和SimpleMapper,它们将使用initMapping方法实现IMapper接口,例如,您可以创建工厂以根据您的语言获取正确的映射器。所以最后你的映射将被分开为不同的语言(这在我看来更好)。