IT:AutoMapper:Common Maps
Summary
Not everything is rosy with AutoMapper. Sometimes you get back a string that you need to convert to a DateTime, or vice versa.
Here are some common Maps that may help.
**Reminder:**
Don't forget that Value fields in ViewModels – especially if the properties are going to be displayed conditionally (and hence returning nothing) – can benefit from being nullable.
Value Maps
First you have to register maps per type:
//Create maps for string to both Value and Nullable Values: //bool Mapper.CreateMap<string, bool?>().ConvertUsing<GenericTypeConverter<string,bool?>>(); Mapper.CreateMap<string, bool>().ConvertUsing<GenericTypeConverter<string,bool>>(); //int Mapper.CreateMap<string, int>().ConvertUsing<GenericTypeConverter<string,int>>(); Mapper.CreateMap<string, int?>().ConvertUsing<GenericTypeConverter<string,int>>>(); //decimal Mapper.CreateMap<string, decimal?>().ConvertUsing<GenericTypeConverter<string,decimal>>(); Mapper.CreateMap<string, decimal>().ConvertUsing<GenericTypeConverter<string,decimal?>>(); //int64 Mapper.CreateMap<string, Int64?>().ConvertUsing<GenericTypeConverter<string,int64>>(); Mapper.CreateMap<string, Int64>().ConvertUsing<GenericTypeConverter<string,int64?>>(); //DateTime Mapper.CreateMap<string, DateTime?>().ConvertUsing<GenericTypeConverter<string,DateTime>>(); Mapper.CreateMap<string, DateTime>().ConvertUsing<GenericTypeConverter<string,DateTime?>>();
Note that I do not know how to Convert for only one method...
Refering to:
public class GenericTypeConverter<TSource,TTarget> : TypeConverter<TSource, TTarget>
{ protected override T ConvertCore(TSource source){
return source.ConvertTo<TTarget>(source);
}
}
If the above does not work, the more manual way is described here: http://stackoverflow.com/questions/4101516/automapper-how-to-parse-an-int-from-a-string-and-possible-to-creating-rules-bas