如何使用 Automapper 将目标中的数组映射到一个项目
How to map array in destination with one item using Automapper
我有 类 类:
class A
{
public string str1 { get; set; }
public string str2 { get; set; }
public string str3 { get; set; }
}
class B
{
public string bstr1 { get; set; }
public string bstr2 { get; set; }
}
class C
{
public string cstr1 { get; set; }
public IEnumerable<B> barr1 { get; set; }
}
如何创建类似
的映射
this.CreateMap<A, C>()
.ForMember(dest => dest.cstr1, exp => exp.MapFrom(scc => scc.str1))
.ForMember(dest => dest.barr1, exp => exp.MapFrom(scc => scc))
.IgnoreAllNonExisting();
this.CreateMap<A, B[]>()
.ForMember(dest => dest[0].bstr1, exp => exp.MapFrom(scc => scc.str2))
.ForMember(dest => dest[0].bstr2, exp => exp.MapFrom(scc => scc.str3))
.IgnoreAllNonExisting();
用简单的话来说就是如何将对象映射到目标数组的第一项。
你可以这样做:
Mapper.CreateMap<A, B>()
.ForMember(dest => dest.bstr1, exp => exp.MapFrom(src => src.str2))
.ForMember(dest => dest.bstr2, exp => exp.MapFrom(src => src.str3));
Mapper.CreateMap<A, C>()
.ForMember(dest => dest.cstr1, exp => exp.MapFrom(scc => scc.str1))
.ForMember(dest => dest.barr1, exp => exp.ResolveUsing<AToBCollectionResolver>());
其中 AToBCollectionResolver
:
class AToBCollectionResolver : ValueResolver<A, IEnumerable<B>>
{
protected override IEnumerable<B> ResolveCore(A source)
{
return new[] { Mapper.Map<B>(source)};
}
}
我有 类 类:
class A
{
public string str1 { get; set; }
public string str2 { get; set; }
public string str3 { get; set; }
}
class B
{
public string bstr1 { get; set; }
public string bstr2 { get; set; }
}
class C
{
public string cstr1 { get; set; }
public IEnumerable<B> barr1 { get; set; }
}
如何创建类似
的映射this.CreateMap<A, C>()
.ForMember(dest => dest.cstr1, exp => exp.MapFrom(scc => scc.str1))
.ForMember(dest => dest.barr1, exp => exp.MapFrom(scc => scc))
.IgnoreAllNonExisting();
this.CreateMap<A, B[]>()
.ForMember(dest => dest[0].bstr1, exp => exp.MapFrom(scc => scc.str2))
.ForMember(dest => dest[0].bstr2, exp => exp.MapFrom(scc => scc.str3))
.IgnoreAllNonExisting();
用简单的话来说就是如何将对象映射到目标数组的第一项。
你可以这样做:
Mapper.CreateMap<A, B>()
.ForMember(dest => dest.bstr1, exp => exp.MapFrom(src => src.str2))
.ForMember(dest => dest.bstr2, exp => exp.MapFrom(src => src.str3));
Mapper.CreateMap<A, C>()
.ForMember(dest => dest.cstr1, exp => exp.MapFrom(scc => scc.str1))
.ForMember(dest => dest.barr1, exp => exp.ResolveUsing<AToBCollectionResolver>());
其中 AToBCollectionResolver
:
class AToBCollectionResolver : ValueResolver<A, IEnumerable<B>>
{
protected override IEnumerable<B> ResolveCore(A source)
{
return new[] { Mapper.Map<B>(source)};
}
}