如何使用自动映射器将单个对象属性映射到复杂类型的对象数组

编程入门 行业动态 更新时间:2024-10-24 06:27:23
本文介绍了如何使用自动映射器将单个对象属性映射到复杂类型的对象数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我得到了如下的类结构,并且已经创建了映射结构,但是它没有按预期工作.

I got class structure like follows, and I've created mapping structure, but it is not working as expected.

public class ResponseHeader { public ResHeader ResHeader { get; set; } } public class ResHeader { public ServiceResStatus ServiceResStatus { get; set; } public Error[] Errors { get; set; } } public class Error { public string ErrorCode { get; set; } public string ErrorDesc { get; set; } public string Source { get; set; } } public class ServiceResStatus { public string ServiceResCode { get; set; } public string ServiceResDesc { get; set; } public System.DateTime ServiceRespDateTime { get; set; } public string ServiceUniqueRefNo { get; set; } } public class ExceptionInformation { public string Code { get; set; } public string Description { get; set; } public string Source { get; set; } }

我想将ExceptionInformation属性映射到ResponseHeader.我总是得到ResponseHeader dto为null.

I want to map ExceptionInformation properties to ResponseHeader. I always get ResponseHeader dto is null.

var config = new MapperConfiguration(cfg => { cfg.CreateMap<ExceptionInformation, ResponseHeader>(); cfg.CreateMap<ExceptionInformation, ResHeader>() .ForMember(d => d.Errors, opts => opts.ResolveUsing(src => new Error() {ErrorCode = src.Code})) .ForMember(d => d.Errors, opts => opts.ResolveUsing(src => new Error() {ErrorDesc = src.Description})) .ForMember(d => d.Errors, opts => opts.ResolveUsing(src => new Error() {Source = src.Code})) .ForMember(d => d.ServiceResStatus, opts => opts.Ignore()); cfg.CreateMap<ExceptionInformation, ServiceResStatus>() .ForMember(d => d.ServiceResCode, opts => opts.MapFrom(src => src.Code)) .ForMember(d => d.ServiceResDesc, opts => opts.MapFrom(src => src.Description)) .ForMember(d => d.ServiceRespDateTime, opts => opts.MapFrom(src => DateTime.Now)) .ForMember(d => d.ServiceUniqueRefNo, opts => opts.Ignore()); }); var mapper = config.CreateMapper(); var info = new ExceptionInformation() { Code = "ERR01", Description = "Error", Source = "Oven" }; ResponseHeader dto = mapper.Map<ResponseHeader>(info);

任何有效的解决方案表示赞赏.

any working solution appreciated.

推荐答案

我想出了此解决方案来解决您的问题.这是代码段

I came up with this solution to resolve your issue. Here is the code snippet

public class ResponseHeader { public ResHeader ResHeader { get; set; } } public class ResHeader { public ServiceResStatus ServiceResStatus { get; set; } public Error[] Errors { get; set; } } public class Error { public string Code { get; set; } public string Description { get; set; } public string Source { get; set; } } public class ServiceResStatus { public string ServiceResCode { get; set; } public string ServiceResDesc { get; set; } public System.DateTime ServiceRespDateTime { get; set; } public string ServiceUniqueRefNo { get; set; } } public class ExceptionInformation { public string Code { get; set; } public string Description { get; set; } public string Source { get; set; } } class Program { static void Main(string[] args) { var config = new MapperConfiguration(cfg => { cfg.CreateMap<ExceptionInformation, Error>(); cfg.CreateMap<ExceptionInformation, ResHeader>() .ForMember(d => d.Errors, opts => opts.MapFrom(src => new[] {src})) .ForMember(d => d.ServiceResStatus, opts => opts.Ignore()); cfg.CreateMap<ExceptionInformation, ServiceResStatus>() .ForMember(d => d.ServiceResCode, opts => opts.MapFrom(src => src.Code)) .ForMember(d => d.ServiceResDesc, opts => opts.MapFrom(src => src.Description)) .ForMember(d => d.ServiceRespDateTime, opts => opts.MapFrom(src => DateTime.Now)) .ForMember(d => d.ServiceUniqueRefNo, opts => opts.Ignore()); cfg.CreateMap<ExceptionInformation, ServiceResStatus>() .ForMember(d => d.ServiceResCode, opts => opts.MapFrom(src => src.Code)) .ForMember(d => d.ServiceResDesc, opts => opts.MapFrom(src => src.Description)) .ForMember(d => d.ServiceRespDateTime, opts => opts.MapFrom(src => DateTime.Now)) .ForMember(d => d.ServiceUniqueRefNo, opts => opts.Ignore()); cfg.CreateMap<ExceptionInformation, ResponseHeader>() .ForMember(des => des.ResHeader, opt => opt.MapFrom(src => new ResHeader() { Errors = new Error[1] { new Error() {Code = src.Code, Description = src.Description, Source = src.Source }}, ServiceResStatus = new ServiceResStatus() { ServiceResCode = src.Code, ServiceResDesc = src.Description, ServiceRespDateTime = DateTime.Now, ServiceUniqueRefNo = null} })); }); var mapper = config.CreateMapper(); var info = new ExceptionInformation() { Code = "ERR01", Description = "Error", Source = "Oven" }; var dto1 = mapper.Map<ExceptionInformation, Error>(info); var dto2 = mapper.Map<ExceptionInformation, ResHeader>(info); var dto3 = mapper.Map<ExceptionInformation, ServiceResStatus>(info); var dto4 = mapper.Map<ExceptionInformation, ResponseHeader>(info); //Put a check point in cole readline and verify objects dto1, dto2, dto3 and dto4 Console.ReadLine(); } }

}`

更多推荐

如何使用自动映射器将单个对象属性映射到复杂类型的对象数组

本文发布于:2023-11-26 17:25:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1634498.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:对象   数组   如何使用   属性   类型

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!