使用 "AutoMapper" 将其中包含 class 列表的 class 映射到另一个类似 属性 的 class

Map a class with List of class in it into another class of similar property using "AutoMapper"

好吧,我的问题是我不明白如何使用 Automapper 来映射 类。

ClassA
{
    List<ClassA1> classA1 {get; set;}

    ClassA2 ClassA2Object {get; set;}
}

ClassB
{
    List<ClassB1> classB1 {get; set;}

    ClassB2 ClassB2Object {get; set;}
}

我把它映射成

CreateMap<ClassA, ClassB>();

我已经搜索并发现使用 ForPath() 和 AfterMap() 设置值但未能映射 类 的列表 任何人都知道这种情况下 CreateMap 的正确方法吗?

来自AutoMapper docs

AutoMapper only requires configuration of element types, not of any array or list type that might be used.

只要列表中的类型之间存在映射,例如。 ClassA1ClassB1,它应该可以正常工作。

但是,由于 属性 名称在 ClassAClassB 中不同,您需要明确地教导 AutoMapper 如何映射这些属性(我稍微更改了您的代码以具有 public属性):

public class ClassA
{
    public List<ClassA1> classA1 { get; set; }

    public ClassA2 ClassA2Object { get; set; }
}

public class ClassB
{
    public List<ClassB1> classB1 { get; set; }

    public ClassB2 ClassB2Object { get; set; }
}

然后你可以像这个例子一样使用它:

class Program
{
    static void Main(string[] args)
    {
        var config = new MapperConfiguration(cfg =>
        {
            cfg.CreateMap<ClassA, ClassB>()
            .ForMember(dst => dst.classB1, opt => opt.MapFrom(src => src.classA1))
            .ForMember(dst => dst.ClassB2Object, opt => opt.MapFrom(src => src.ClassA2Object));
            cfg.CreateMap<ClassA1, ClassB1>();
            cfg.CreateMap<ClassA2, ClassB2>();
        });

        var mapper = config.CreateMapper();

        var a = new ClassA
        {
            classA1 = new List<ClassA1> { new ClassA1() },
            ClassA2Object = new ClassA2()
        };

        var b = mapper.Map<ClassB>(a);

        Debug.Assert(b.classB1 != null);
        Debug.Assert(b.classB1.Count == a.classA1.Count);
        Debug.Assert(b.ClassB2Object != null);

}

我希望这是有道理的。