簡體   English   中英

使用“ AutoMapper”將其中具有類列表的類映射到具有類似屬性的另一個類中

[英]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僅需要配置元素類型,而不需要配置任何可能使用的數組或列表類型。

只要列表中的類型之間存在映射,例如。 ClassA1ClassB1 ,它應該可以正常工作。

但是,由於ClassAClassB的屬性名稱不同,因此您需要顯式地教AutoMapper如何映射這些屬性(我對代碼進行了些微更改以具有公共屬性):

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);

}

我希望這是有道理的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM