使用 "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 only requires configuration of element types, not of any array or list type that might be used.
只要列表中的类型之间存在映射,例如。 ClassA1
和 ClassB1
,它应该可以正常工作。
但是,由于 属性 名称在 ClassA
和 ClassB
中不同,您需要明确地教导 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);
}
我希望这是有道理的。
好吧,我的问题是我不明白如何使用 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 only requires configuration of element types, not of any array or list type that might be used.
只要列表中的类型之间存在映射,例如。 ClassA1
和 ClassB1
,它应该可以正常工作。
但是,由于 属性 名称在 ClassA
和 ClassB
中不同,您需要明确地教导 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);
}
我希望这是有道理的。