Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Automapper: Map an Enum to its [Description] attribute

Tags:

automapper

I have a source object that looks like this:

private class SourceObject {
    public Enum1 EnumProp1 { get; set; }
    public Enum2 EnumProp2 { get; set; }
}

The enums are decorated with a custom [Description] attribute that provides a string representation, and I have an extension method .GetDescription() that returns it. How do I map these enum properties using that extension?

I'm trying to map to an object like this:

private class DestinationObject {
    public string Enum1Description { get; set; }
    public string Enum2Description { get; set; }
}

I think a custom formatter is my best bet, but I can't figure out how to add the formatter and specify which field to map from at the same time.

like image 225
Seth Petry-Johnson Avatar asked Jun 07 '10 23:06

Seth Petry-Johnson


1 Answers

Argh, idiot moment. Didn't realize I could combine ForMember() and AddFormatter() like this:

Mapper.CreateMap<SourceObject, DestinationObject>()
    .ForMember(x => x.Enum1Desc, opt => opt.MapFrom(x => x.EnumProp1))
    .ForMember(x => x.Enum1Desc, opt => opt.AddFormatter<EnumDescriptionFormatter>())
    .ForMember(x => x.Enum2Desc, opt => opt.MapFrom(x => x.EnumProp2))
    .ForMember(x => x.Enum2Desc, opt => opt.AddFormatter<EnumDescriptionFormatter>());

Problem solved.

like image 95
Seth Petry-Johnson Avatar answered Sep 28 '22 07:09

Seth Petry-Johnson