簡體   English   中英

使用自動映射器映射列表數組

[英]map array of list using automapper

我正在嘗試映射包含源類的對象數組,該對象類必須映射到目標類。

class A
{
        public string Id { get; set; }
        public string Name { get; set; }
        public string Url { get; set; }
        public string Details { get; set; }
        public string Image { get; set; }
        public string Decription{ get; set;}
 }

class B
{
 public string Id { get; set; }
 public string Name { get; set; }
 public List<C> { get; set; }
}

class C{
  public string Url { get; set; }
  public string Details { get; set; }
  public string Image { get; set; }
  public string Decription{ get; set;}
}

我需要使用自動映射器將B類列表映射到A類列表

這很簡單。 您必須分兩步映射信息。

首先讓我們簡化您的示例:

class A {
    public string AttrB { get; set; }
    public string AttrC { get; set; }
}
class B {
    public string AttrB { get; set; }
}

class C {
    public string AttrC { get; set;}
}

要從B和C創建A的一個對象,您必須創建兩個貼圖並依次使用它們:

Mapper.CreateMap<B, A>();
Mapper.CreateMap<C, A>();

var c = new C { AttrC = "AttrCValue" };
var b = new B { AttrB = "AttrBValue" };
var a = Mapper.Map<A>(b); // a with the attribute values of b
Mapper.Map(c, a); // map the attribute values of c also into a

我認為沒有什么適合您的。 但是現在是棘手的部分。 它的工作原理相同:

class A {
    public string AttrB { get; set; }
    public string AttrC { get; set; }
}
class B {
    public string AttrB { get; set; }
    public List<C> AttrBList { get; set; }
}

class C {
    public string AttrC { get; set;}
}

我們需要另一個地圖和一個自定義轉換器:

Mapper.CreateMap<B, A>();
Mapper.CreateMap<C, A>();
Mapper.CreateMap<B, IEnumerable<A>>().ConvertUsing<BConverter>();

class BConverter : ITypeConverter<B, IEnumerable<A>> {
    public IEnumerable<A> Convert(ResulutionContext ctx) {
        B b = (B)ctx.SourceValue;
        foreach(var aFromC in b.AttrBList.Select(c => Mapper.Map<A>(c))) { // map c attributes into an a object and return it (through Select it's a mapping for all items of the list AttrBList)
            Mapper.Map(b, aFromC); // push the attribute values from b to the aFromC object. Because this is inside the loop, it happens for every Item in the AttrBList array
            yield return aFromC;
        }
    }
}

現在您可以使用它:

var allAObjects = Mapper.Map<IEnumerable<A>>(listOfBObjects);

暫無
暫無

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

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