Create mappings for properties of Dest:
Mapper.CreateMap<Source, Dest>()
.ForMember(d => d.Item1, o => o.MapFrom(s => s.ItemArray[0]))
.ForMember(d => d.Item2, o => o.MapFrom(s => s.ItemArray[1]))
.ForMember(d => d.Item3, o => o.MapFrom(s => s.ItemArray[2]))
.ForMember(d => d.Item4, o => o.MapFrom(s => s.ItemArray[3]));
Usage:
Source source = new Source() { ItemArray = new int[] { 1, 2, 3, 4 } };
Dest dest = Mapper.Map<Source, Dest>(source);
UPDATE: No, there is no simple way. How AutoMapper will understand, that your property Foo should be mapped to element at index N in source property Bar? You should provide all this info.
UPDATE: From Automapper
Projection transforms a source to a destination beyond flattening the object model. Without extra configuration, AutoMapper requires a flattened destination to match the source type's naming structure. When you want to project source values into a destination that does not exactly match the source structure, you must specify custom member mapping definitions.
So, yes. If naming structure does not match, you must specify custom mapping for members.
UPDATE:
Well, actually you can do all conversion manually (but I don't think it's much better way, especially if you have other properties which could be mapped by name):
Mapper.CreateMap<Source, Dest>().ConstructUsing((s) => new Dest()
{
Item1 = s.ItemArray[0],
Item2 = s.ItemArray[1],
Item3 = s.ItemArray[2],
Item4 = s.ItemArray[3]
}