繁体   English   中英

复杂对象到自动映射器中的列表映射 - RESTAPI

[英]Complex Object to List Mapping in automapper - RESTAPI

下面是我的 Source 对象

public class Source
{

    public string Name { get; set; }
    public DateTime GeneratedFrom { get; set; }
    public DateTime GeneratedTo { get; set; }

}

然后是 Destination 对象

public class Destination
{
    public DateTime Day{ get; set; }
    public string Name { get; set; } 
}

目标中的日期从Source.GenerateFromSource.GenerateTo获取其值(使用 while 循环迭代直到Source.Generatefrom <= Source.GenerateTo )。 最后,我需要一个对象列表,如下所示。

{"Day":"2019-02-04","name":"abc"},
{"Day":"2019-02-05","name":"abc"},
{"Day":"2019-02-06","name":"abc"}

这可以使用 automapper 来实现吗?

下面是带有 while 循环的映射器配置文件类。 不确定这是否是正确的方法

CreateMap<Source, Destination>()
.forMember(
 dest => dest.Day,
 opt => opt.MapFrom(src => src.GenerateFrom))
 .AfterMap((src, dest) =>
 {
     var StartDate = src.GenerateFrom;
     var EndDate = src.GenerateTo;

     List<Destination> list = new List<Destination>();
     while(Startdate <= EndDate)
     {
        var data = new Destination {Day = StartDate, name = src.Name};
        list.Add(data);
        StartDate.AddDays(1);
     }
 });

你可以为你的对象注册这个映射,如果Day总是从GeneratedFrom属性获取它的值。 (或根据您的需要修改)

CreateMap<Source, Destination>()
                    .ForMember(d => d.GeneratedFrom, o => o.MapFrom(s => s.Day))
                    .ForMember(d => d.Name, o => o.MapFrom(s => s.Name));

那么如果你想得到一个对象列表,其中Source.Generatefrom <= Source.GenerateTo你需要使用System.Linq表达式:

var destList = sourceList.Where(x => x.GeneratedFrom <= x.GeneratedTo)
                         .Select(_mapper.Map<Destination>).ToList();

然后使用Newtonsoft.Json库对其进行序列化:

var json = JsonConvert.SerializeObject(destList);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM