c# - 使用“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 只需要配置元素类型,而不需要任何可能使用的数组或列表类型。
只要列表中的类型之间存在映射,例如。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);
}
我希望这是有道理的。
推荐阅读
- python - 运行 Tensorflow 后无法将消息发送回 Twilio
- macos - 为 CGMutablePath 绘制阴影,不闭合,只是一条线
- android - Airwatch 目录和 Airwatch Tunnen URL 方案?
- node.js - 来自重定向 url 的错误请求在 Azure Bot 服务上为 Instagram 设置新的身份验证连接设置
- javascript - 我应该如何等待用户输入?
- javascript - sinon 间谍功能不起作用
- objective-c - 当前开源的 OC Runtime 中的 _OBJC_TAG_MASK 很奇怪
- photoshop - Zeplin 上没有颜色信息的按钮和文本
- html - 动态显示不同的对象属性
- python - Urllib 和请求总是返回 200 的状态码