![](/img/trans.png)
[英]Map list inside class to a list inside another class using 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僅需要配置元素類型,而不需要配置任何可能使用的數組或列表類型。
只要列表中的類型之間存在映射,例如。 ClassA1
和ClassB1
,它應該可以正常工作。
但是,由於ClassA
和ClassB
的屬性名稱不同,因此您需要顯式地教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.