![](/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.