automapper将深层对象自动化为扁平对象和后退

lan*_*all 2 c# 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; }
}
Run Code Online (Sandbox Code Playgroud)

And*_*ker 6

有两种方法可以做到这一点:

  1. 定义两个映射,一个来自FlatObject --> Person另一个映射FlatObject --> Address:

    Mapper.CreateMap<FlatObject, Address>();
    
    Mapper.CreateMap<FlatObject, Person>()
        .ForMember(dest => dest.Address, opt => opt.MapFrom(src => src));
    
    Run Code Online (Sandbox Code Playgroud)
  2. 定义一个映射并Address在映射定义中创建对象:

    Mapper.CreateMap<FlatObject, Person>()
        .ForMember(
            dest => dest.Address, 
            opt => opt.MapFrom(
                src => new Address { City = src.City, State = src.State }));
    
    Run Code Online (Sandbox Code Playgroud)

我个人会选择选项1.这样,如果你添加属性FlatObject,你不必担心更新映射定义(如果使用选项#2,你会想到).

但是,@Raphaël指出作者的链接是正确的,该链接质疑映射到域对象的有效性.