automapper将深层对象自动映射到平面对象并返回
如何将深对象转换为平面对象并使用automapper将其转换回来?
例如:
Person
{
public string Name { get; set; }
public Address Address { get; set; }
}
Address
{
public string City { get; set; }
public string State { get; set; }
}
FlatObject
{
public string Name { get; set; }
public string City { get; set; }
public string State { get; set; }
}
两种方法可以实现这一点:
定义两个映射,一个来自FlatObject --> Person
,另一个来自FlatObject --> Address
:
Mapper.CreateMap<FlatObject, Address>();
Mapper.CreateMap<FlatObject, Person>()
.ForMember(dest => dest.Address, opt => opt.MapFrom(src => src));
定义一个映射并在映射定义中创建Address
对象:
Mapper.CreateMap<FlatObject, Person>()
.ForMember(
dest => dest.Address,
opt => opt.MapFrom(
src => new Address { City = src.City, State = src.State }));
就个人而言,我会选择1。这种方式,如果你添加属性FlatObject
,你不必担心更新映射定义(如果你使用选项#2,你会的)。
然而,@Raphaël在指出作者链接质疑映射到域对象的有效性方面是正确的。
从版本6.0.1开始,您可以使用ReverseMap方法来创建不平坦的地图。
Mapper
.CreateMap<FlatObject, Person>()
.ReverseMap();
这会创建两张地图,平面地图用于创建相反的地图。
有关于automapper文档的详细信息
那么,AutoMapper可以“自动”展平,只要遵守命名约定就可以了
FlatObject {
public string Name {get;set;}
public string AddressCity {get;set;}
public string AddressState {get;set;}
}
但AFAIK,AutoMapper不会解冻。
从图书馆的作者看这个。
他们是其他工具,可以做到这一点(与其他类型的限制),如ValueInjecter
链接地址: http://www.djcxy.com/p/6379.html上一篇: automapper automapping deep object to flat object and back