我有一个包含两种语言成员变量的域模型,如下所示:
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)
这是一个可行的解决方案,还是有更好的方法?
答案 0 :(得分:4)
我不会创建单独的类。使用AfterMap
:
Mapper.CreateMap<Resource, JsonResource>()
.AfterMap((r,b) => r.Name = isEnglish ? b.EnglishName : b.SwedishName);
isEnglish
是您应用中的条件,但您需要使用它。
答案 1 :(得分:0)
您可以创建两个不同的类EngMapper和SimpleMapper,它们将使用方法initMapping实现IMapper接口,例如,之后您可以创建工厂以根据您的语言获取正确的映射器。所以最后你的映射将针对不同的语言分开(在我看来这更好)。