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

    下一篇: Automapper complex objects