自动映射器条件语言映射

本文关键字:映射 语言 条件 | 更新日期: 2023-09-27 18:31:17

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

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

为了演示,我有一个简化的模型,它被交付给 json 序列化程序:

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

这些是用自动映射器映射的,如下所示:

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 接口,例如,之后您可以创建一个工厂,以便根据您的语言获得正确的映射器。所以最后你的映射将被分开为不同的语言(在我看来更好)。