[英]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.GenerateFrom
和Source.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.