自动映射条件语言映射

时间:2012-04-17 10:04:56

标签: c# automapper

我有一个包含两种语言成员变量的域模型,如下所示:

public class Resource
{
   public string SwedishName;
   public string EnglishName;
}

为了演示,我有一个简化的模型,传递给json序列化器:

[JsonObject]
public class JsonResource
{
   [JsonProperty]
   public string Name;
}

这些与automaticpper映射如下:

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)

这是一个可行的解决方案,还是有更好的方法?

2 个答案:

答案 0 :(得分:4)

我不会创建单独的类。使用AfterMap

Mapper.CreateMap<Resource, JsonResource>()
 .AfterMap((r,b) => r.Name = isEnglish ? b.EnglishName : b.SwedishName);

isEnglish是您应用中的条件,但您需要使用它。

答案 1 :(得分:0)

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