基于 属性 个名称的 C# AutoMapper 自定义解析器
C# AutoMapper Custom Resolver based on property names
我正在使用 AutoMapper (v6.1.1) 将一些实体对象映射到将由 Web Api 返回的 DTO 对象 .NET 4.6.2.
中的 REST Web 服务
现在我手动设置映射如下:
Mapper.Initialize((config) =>
{
config.CreateMap<SignBook, sdk.SignBook>()
.ForMember(dto => dto.DocumentId, conf => conf.MapFrom(obj => obj.Document.Id))
.ForMember(dto => dto.UserId, conf => conf.MapFrom(obj => obj.User.Id))
.ForMember(dto => dto.DeviceId, conf => conf.MapFrom(obj => obj.Device.Id))
.ForMember(dto => dto.SignTypeId, conf => conf.MapFrom(obj => obj.SignType.Id))
.ForMember(dto => dto.StateId, conf => conf.MapFrom(obj => obj.State.Id))
.ReverseMap();
});
但是,如您所见,DTO 对象的所有属性都简单地命名为 实体名称 + "Id" 后缀(例如:Document.Id
在实体中到 DocumentId
在 DTO 中)。
因为我有很多实体要映射,所以我想为 AutoMapper 创建一个映射规则(因此创建一个自定义解析器),它将自动执行此操作。
有可能吗?
当你需要做这样的事情时,是否也有一些最佳实践?所以我想做的是将 Entities 对象映射到 DTO 对象。我的实体是 NHibernate 对象,彼此之间有很多关系,并且还使用延迟加载,所以我不能将它们直接推回 Web Api 方法结果进行序列化。
AutoMapper 默认支持 Flattening。您只需要简单的映射:
Mapper.Initialize(config =>
{
config.CreateMap<SignBook, sdk.SignBook>().ReverseMap();
});
并且从 AutoMapper 6.1 开始 Unflattening 也被支持。
扁平化:
var entity = new SignBook { new Document { Id = 42 } };
var dto = Mapper.Map<sdk.SignBook>(entity);
给你
{
"DocumentId": 42
}
去扁平化:
var dto = new sdk.SignBook { DocumentId = 42 };
var entity = Mapper.Map<SignBook>(dto);
给予
{
"Document": {
"Id": 42
}
}
我正在使用 AutoMapper (v6.1.1) 将一些实体对象映射到将由 Web Api 返回的 DTO 对象 .NET 4.6.2.
中的 REST Web 服务现在我手动设置映射如下:
Mapper.Initialize((config) =>
{
config.CreateMap<SignBook, sdk.SignBook>()
.ForMember(dto => dto.DocumentId, conf => conf.MapFrom(obj => obj.Document.Id))
.ForMember(dto => dto.UserId, conf => conf.MapFrom(obj => obj.User.Id))
.ForMember(dto => dto.DeviceId, conf => conf.MapFrom(obj => obj.Device.Id))
.ForMember(dto => dto.SignTypeId, conf => conf.MapFrom(obj => obj.SignType.Id))
.ForMember(dto => dto.StateId, conf => conf.MapFrom(obj => obj.State.Id))
.ReverseMap();
});
但是,如您所见,DTO 对象的所有属性都简单地命名为 实体名称 + "Id" 后缀(例如:Document.Id
在实体中到 DocumentId
在 DTO 中)。
因为我有很多实体要映射,所以我想为 AutoMapper 创建一个映射规则(因此创建一个自定义解析器),它将自动执行此操作。 有可能吗?
当你需要做这样的事情时,是否也有一些最佳实践?所以我想做的是将 Entities 对象映射到 DTO 对象。我的实体是 NHibernate 对象,彼此之间有很多关系,并且还使用延迟加载,所以我不能将它们直接推回 Web Api 方法结果进行序列化。
AutoMapper 默认支持 Flattening。您只需要简单的映射:
Mapper.Initialize(config =>
{
config.CreateMap<SignBook, sdk.SignBook>().ReverseMap();
});
并且从 AutoMapper 6.1 开始 Unflattening 也被支持。
扁平化:
var entity = new SignBook { new Document { Id = 42 } };
var dto = Mapper.Map<sdk.SignBook>(entity);
给你
{
"DocumentId": 42
}
去扁平化:
var dto = new sdk.SignBook { DocumentId = 42 };
var entity = Mapper.Map<SignBook>(dto);
给予
{
"Document": {
"Id": 42
}
}