Automapper поможет сопоставление сложных объектов C # - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь сопоставить объект Vehicle с объектом Motor, используя Automapper

public class Range<T>
{
    public T Min { get; set; }
    public T Max { get; set; }
}

public Enum SpeedType
{
    [Display(Name = "-")] Unknown = 0,
    [Display(Name = "M")] Manual= 1,
    [Display(Name = "A")] Automatic= 2
}

public class Vehicle
{
    public Range<string> Speed { get; set; }
}

public class Motor
{
    public Range<SpeedType?> Speed { get; set; }
}

Я попытался использовать MapFrom (чтение документации), но безуспешно.Может кто-нибудь направить меня в правильном направлении.Я даже не уверен, можно ли это сопоставить, используя Automapper.В прошлом я использовал autopper для простых отображений.

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Я придумал следующее отображение, чтобы решить мою проблему.Я написал собственный метод GetEnum

CreateMap<Vehicle,Motor>()
.ForMember(g => g.Speed, opt => opt.MapFrom(u=> new Range<SpeedType?>
                {
                    Min = EnumHelper.GetEnum<SpeedType?>(u.Speed.Min),
                    Max = EnumHelper.GetEnum<SpeedType?>(u.Speed.Max),
                }))
0 голосов
/ 28 декабря 2018

Это работает для меня:

Mapper.Initialize(cfg =>
{
    cfg.CreateMap<string, SpeedType?>().ConvertUsing(speed =>
    {
        switch (speed)
        {
            case "M": return SpeedType.Manual;
            case "A": return SpeedType.Automatic;
            default: return SpeedType.Unknown;
        }
    });

    cfg.CreateMap<Range<string>, Range<SpeedType?>>();
    cfg.CreateMap<Vehicle, Motor>();
});

var vehicle = new Vehicle
{
    Speed = new Range<string>
    {
        Min = "M",
        Max = "A"
    }
};

var motor = Mapper.Map<Vehicle, Motor>(vehicle);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...