[英]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.