1

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

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)

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

4

2 回答 2

4

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

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

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

于 2012-04-17T10:14:03.250 回答
0

您可以创建两个不同的类 EngMapper 和 SimpleMapper,它们将使用 initMapping 方法实现 IMapper 接口,例如,之后您可以创建一个工厂以便根据您的语言获得正确的映射器。因此,最终您的映射将为不同的语言分开(我认为这更好)。

于 2012-04-17T10:12:28.590 回答