C# 自动映射自定义内联映射
我有两节课C# 自动映射自定义内联映射,c#,api,loops,dictionary,automapper,C#,Api,Loops,Dictionary,Automapper,我有两节课 public class SourceClass { public Guid Id { get; set; } public Guid Provider { get; set; } } public class DestinationClass { public Guid Id { get; set; } public Guid Provider { get; set; } public Guid CustomerId {get; set
public class SourceClass
{
public Guid Id { get; set; }
public Guid Provider { get; set; }
}
public class DestinationClass
{
public Guid Id { get; set; }
public Guid Provider { get; set; }
public Guid CustomerId {get; set;}
}
我已经使用以下代码初始化了映射
CreateMap<SourceClass, DestinationClass>();
CreateMap();
然后在我的控制器中,我有:
Mapper.Map<List<DestinationClass>>(requests)
Mapper.Map(请求)
其中“requests”是传入控制器的SourceClass对象列表
现在,此代码可以正常工作,映射也可以按配置正常工作。但是,我也通过了CustomerId,并希望相应地在DestinationClass中设置它
当映射发生时,有没有办法做到这一点,这样我就不必编写额外的循环来在列表中的每个对象中设置CustomerId?您可以通过将
键值
传递给映射器来传递额外的参数(如@LucianBargaoanu所建议的)。自定义值解析器和映射执行可以实现为:
// Configuration
var configuration = new MapperConfiguration(cfg =>
{
cfg.CreateMap<SourceClass, DestinationClass>()
.ForMember(dest => dest.CustomerId, opt =>
opt.MapFrom((src, dest, destMember, context) =>
context.Items["CustomerId"]));
});
var mapper = configuration.CreateMapper();
//Sample source class
var sourceClass = new SourceClass { Id = Guid.NewGuid(), Provider = Guid.NewGuid() };
var destClass = mapper.Map<SourceClass, DestinationClass>(sourceClass,
opt => opt.Items["CustomerId"] = "96b4b6e6-7937-4579-ba01-4a051bc0b93b");
//配置
var配置=新的MapperConfiguration(cfg=>
{
cfg.CreateMap()
.ForMember(dest=>dest.CustomerId,opt=>
opt.MapFrom((src、dest、destMember、context)=>
context.Items[“CustomerId”]);
});
var mapper=configuration.CreateMapper();
//示例源类
var sourceClass=newsourceclass{Id=Guid.NewGuid(),Provider=Guid.NewGuid()};
var destClass=mapper.Map(sourceClass,
选项=>选项项[“客户ID”]=“96b4b6e6-7937-4579-ba01-4a051bc0b93b”);
destClass
对象的CustomerId
成员由传递的GUID填充
注意:
SourceClass
和DestinationClass
定义取自OP.它在没有Guid的情况下工作。Parse
或ToString
。只需context.Items[“CustomerId”]
@LucianBargaoanu谢谢。你说得对。我编辑了anser以删除冗余解析。因为我已经存储了string
,所以我已经显式地强制转换到Guid
@blazerix。如果您可以传递您的实际表达式,那么我将尝试提供帮助。