简体   繁体   中英

Automapper help mapping a complex c# objects

I am trying to map from Vehicle object to the Motor object using 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; }
}

I have tried using the MapFrom (reading the documentation) without any success. Can someone point me in the right direction. I am not even sure if this can be even mapped using Automapper . I have used automapper in the past for simple mappings.

This works for me:

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);

I came up with the following mapping to solve my problem. I wrote a GetEnum custom method

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),
                }))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM