簡體   English   中英

自動映射條件語言映射

[英]Automapper conditional language mapping

我有一個域模型,包含兩種語言的成員變量,如下所示:

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接口,例如,之后您可以創建工廠以根據您的語言獲取正確的映射器。 因此,最終您的映射將針對不同的語言進行分離(在我看來這更好)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM