2015-04-21 10 views
2

У меня есть объект, назовем его Sprite который имеет Dictionary<string, SpriteMapImageWrapper> по имени SpriteImages. Ключ - это строка, которая должна быть «сохранена» в отображаемом объекте. Этот словарь должен быть отображен в плоский List<SpriteMapImageInfo>. Все остальные свойства идентичны, но ключ словаря должен быть сопоставлен с SpriteMapImageInfo.Key. Возможно ли использование AutoMapper?отображение словаря с использованием AutoMapper в список и сохранение его ключа

public class SpriteMapImageWrapper 
{ 
    public int X { get; set; } 
    public int Y { get; set; } 
    public int Width { get; set; } 
    public int Height { get; set; } 
} 
public class SpriteMapImageInfo 
{ 
    public string Key { get; set; } 
    public int X { get; set; } 
    public int Y { get; set; } 
    public int Width { get; set; } 
    public int Height { get; set; } 
} 

ответ

0

Дайте ему снимок, используя .Aftermap, как здесь:

Mapper.CreateMap<Sprite, List<SpriteMapImageInfo>>() 
     .AfterMap((u, t) => 
     { 
      foreach(var s in u.SpriteImages) 
      { 
       t.Add(new SpriteMapImageInfo 
         { 
          Key = s.Key, 
          Height = s.Value.Height, 
          Width = s.Value.Width, 
          X = s.Value.X, 
          Y = s.Value.Y 
         } 
       ); 
      } 
     } 
    ); 
0

Вот еще один способ, с помощью ConstructUsing и AfterMap:

// Create an "inner" mapping 
Mapper.CreateMap<SpriteMapImageWrapper, SpriteMapImageInfo>() 
    .ForMember(dest => dest.Key, opt => opt.Ignore()); 

// Create an "outer" mapping that uses the "inner" mapping 
Mapper.CreateMap<KeyValuePair<string, SpriteMapImageWrapper>, SpriteMapImageInfo>() 
    .ConstructUsing(kvp => Mapper.Map<SpriteMapImageInfo>(kvp.Value)) 
    .AfterMap((src, dest) => dest.Key = src.Key) 
    .ForAllMembers(opt => opt.Ignore()); 

При втором отображении мы говорим AutoMapper для построения SpriteMapImageInfo из KeyValuePair<string, SpriteMapImageWrapper> с использованием определения отображения для SpriteImageWrapper - SpriteMapImageInfo.

Далее мы используем .AfterMap, чтобы присвоить объект Key.

Наконец, мы сообщаем AutoMapper игнорировать все свойства целевого типа, так как мы уже позаботились о них с помощью ConstructUsing.

 Смежные вопросы

  • Нет связанных вопросов^_^