我试图将源列表的内容“展平”到Dest对象上的字段,如下所示:
class Source
{
public IList<TypeX> TypeXs {get; set;}
}
class Dest
{
public int IdentifierXValue { get; set;}
public int IdentifierYValue { get; set;}
public int IdentifierZValue { get; set;}
}
class TypeX
{
Identifier Identifier {get; set;}
float Value {get; set;}
}
enum Identifier
{
X,
Y,
Z
}
使用以下映射从源到dest的映射工作正常:
Mapper.CreateMap<Source, Dest>.ForMember( dest => dest.IdentifierXValue, opt => opt.MapForm(src => src.TypeXs.First(f => f.Identifier == Identifier.X).Value));
如何实现反向映射? “Source”引用已经存在,它将预先填充TypeX的引用。我只需要搜索其Identifier匹配的TypeX对象(比如X),对于该对象,我需要用Dest对象中的IdentifierXValue替换该值。
答案 0 :(得分:1)
这对我有用
Mapper.CreateMap<Dest, Source>()
.ForMember(d => d.TypeXs, opt => opt.Ignore())
.AfterMap((s, d) =>
{
d.TypeXs.First(tx => tx.Identifier == Identifier.X).Value = s.IdentifierXValue;
d.TypeXs.First(tx => tx.Identifier == Identifier.Y).Value = s.IdentifierYValue;
d.TypeXs.First(tx => tx.Identifier == Identifier.Z).Value = s.IdentifierZValue;
}
);
答案 1 :(得分:0)
我认为你需要一个custom type converter。这可能是最简单的方法。