我有一个对象,我们称之为Sprite
,其Dictionary<string, SpriteMapImageWrapper>
名为SpriteImages
。密钥是一个字符串,需要存储&#39;在映射的对象中。此词典需要映射到平面List<SpriteMapImageInfo>
。所有其他属性都相同,但字典键需要映射到SpriteMapImageInfo.Key
。这可以使用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 :(得分: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
}
);
}
}
);
答案 1 :(得分: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
处理了这些属性。