Automapper 自动映射-使用不同的属性将一个对象映射到另一个对象
你能帮我吗。我有一个目标Automapper 自动映射-使用不同的属性将一个对象映射到另一个对象,automapper,Automapper,你能帮我吗。我有一个目标 class Source{ public string A {get;set;} public string B {get;set;} public string C {get;set;} public string D {get;set;} } 和目标对象 class Dest{ public string A1 {get;set;} public string B1 {get;set;} } 是否可以使用Automapp
class Source{
public string A {get;set;}
public string B {get;set;}
public string C {get;set;}
public string D {get;set;}
}
和目标对象
class Dest{
public string A1 {get;set;}
public string B1 {get;set;}
}
是否可以使用Automapper从源对象创建Dest对象,但在Dest的第一个实例中将A映射到A1,将B映射到B1,在Dest的第二个实例中将C映射到A1,将D映射到B1
在梦中得到收集的解决方案
比如:
Mapper.Initialize(cfg =>{
cfg.CreateMap<Source, Dest>()
.ForMember(dest => dest.A1, opt => opt.MapFrom(src => src.A))
.ForMember(dest => dest.B1, opt => opt.MapFrom(src => src.B;))
cfg.CreateMap<Source, Dest>()
.ForMember(dest => dest.A1, opt => opt.MapFrom(src => src.C))
.ForMember(dest => dest.B1, opt => opt.MapFrom(src => src.D))});
新的遍历属性并使用“属性类型”创建对象。您可以创建两个映射器:
var m1 = new MapperConfiguration(
cfg =>
{
cfg.CreateMap<Source, Dest>()
.ForMember(dest => dest.A1, opt => opt.MapFrom(src => src.A))
.ForMember(dest => dest.B1, opt => opt.MapFrom(src => src.B));
})
.CreateMapper();
var m2 = new MapperConfiguration(
cfg =>
{
cfg.CreateMap<Source, Dest>()
.ForMember(dest => dest.A1, opt => opt.MapFrom(src => src.C))
.ForMember(dest => dest.B1, opt => opt.MapFrom(src => src.D));
})
.CreateMapper();
var m1=新的MapperConfiguration(
cfg=>
{
cfg.CreateMap()
.ForMember(dest=>dest.A1,opt=>opt.MapFrom(src=>src.A))
.ForMember(dest=>dest.B1,opt=>opt.MapFrom(src=>src.B));
})
.CreateMapper();
var m2=新的MapperConfiguration(
cfg=>
{
cfg.CreateMap()
.ForMember(dest=>dest.A1,opt=>opt.MapFrom(src=>src.C))
.ForMember(dest=>dest.B1,opt=>opt.MapFrom(src=>src.D));
})
.CreateMapper();
然后在另一个接口(您定义的接口)后面使用它们(例如ISourceMapper),该接口将根据实例的数量在两个映射器之间交替使用(即实例1->mapper 1,实例2->mapper 2,实例3->mapper 1…等)
对于集合部分,您可以轻松调用
IEnumerable。选择将ISourceMapper.Map
方法传递到投影Func您可以创建两个映射器:
var m1 = new MapperConfiguration(
cfg =>
{
cfg.CreateMap<Source, Dest>()
.ForMember(dest => dest.A1, opt => opt.MapFrom(src => src.A))
.ForMember(dest => dest.B1, opt => opt.MapFrom(src => src.B));
})
.CreateMapper();
var m2 = new MapperConfiguration(
cfg =>
{
cfg.CreateMap<Source, Dest>()
.ForMember(dest => dest.A1, opt => opt.MapFrom(src => src.C))
.ForMember(dest => dest.B1, opt => opt.MapFrom(src => src.D));
})
.CreateMapper();
var m1=新的MapperConfiguration(
cfg=>
{
cfg.CreateMap()
.ForMember(dest=>dest.A1,opt=>opt.MapFrom(src=>src.A))
.ForMember(dest=>dest.B1,opt=>opt.MapFrom(src=>src.B));
})
.CreateMapper();
var m2=新的MapperConfiguration(
cfg=>
{
cfg.CreateMap()
.ForMember(dest=>dest.A1,opt=>opt.MapFrom(src=>src.C))
.ForMember(dest=>dest.B1,opt=>opt.MapFrom(src=>src.D));
})
.CreateMapper();
然后在另一个接口(您定义的接口)后面使用它们(例如ISourceMapper),该接口将根据实例的数量在两个映射器之间交替使用(即实例1->mapper 1,实例2->mapper 2,实例3->mapper 1…等)
对于集合部分,您可以轻松调用IEnumerable。选择
将ISourceMapper.Map
方法传递到投影Func
您可以在解析器中设置条件(MapFrom或ResolveUsing)。但是我如何使用它呢?我仍然无法获取映射。您可以在您的冲突解决程序(MapFrom或ResolveUsing)中设置一个条件。但我如何使用它?我还是拿不到地图。
var m1 = new MapperConfiguration(
cfg =>
{
cfg.CreateMap<Source, Dest>()
.ForMember(dest => dest.A1, opt => opt.MapFrom(src => src.A))
.ForMember(dest => dest.B1, opt => opt.MapFrom(src => src.B));
})
.CreateMapper();
var m2 = new MapperConfiguration(
cfg =>
{
cfg.CreateMap<Source, Dest>()
.ForMember(dest => dest.A1, opt => opt.MapFrom(src => src.C))
.ForMember(dest => dest.B1, opt => opt.MapFrom(src => src.D));
})
.CreateMapper();