首页 > 解决方案 > 嵌套对象子类的自动映射器展平

问题描述

我正在尝试使用 AutoMapper 执行以下操作,但没有得到预期的结果。

我有以下配置:

public interface IFlatInterface
{
    public string A {get; set;}
    public string B {get; set;}
    public string C {get; set;}
    public bool D {get; set;}
}


public class ParentObject 
{
    public Data X {get; set;}
    public Measure Y {get; set;} 
}

public class Data 
{
    public string A {get; set;}
    public string B {get; set;}
}

public class Measure
{
    public string C {get; set;}
    public bool D {get; set;}
}

我已经定义了以下映射规则

cfg.CreateMap<IFlatInterface, ParentObject>()
   .ForMember(p => p.Measure, o => o.MapFrom(f => f))
   .ForMember(p => p.Data, o => o.MapFrom(f => f))

cfg.CreateMap<ParentObject, IFlatInterface>()
   .ForMember(i => i.A, o => o.MapFrom(p => p.X.A))
   .ForMember(i => i.B, o => o.MapFrom(p => p.X.B))
   .ForAllOtherMembers(o => o.MapFrom(p.Y))

问题是填充的值是所有剩余字段的字符串“p.Measure”。我想映射以递归方式发生在 Measure 的成员上。我不能制定一个广泛的规则,因为不同的类可以实现 IFlatInterface。

关于如何实现这一目标的任何想法?

谢谢

标签: c#inheritanceinterfacenestedautomapper

解决方案


推荐阅读