Сложное сопоставление объекта с списком в автомате - RESTAPI - PullRequest
0 голосов
/ 27 января 2020

Ниже находится мой исходный объект

public class Source
{

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

}

Тогда объект назначения

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

Дата в пункте назначения получает свое значение от Source.GenerateFrom и Source.GenerateTo (повторяется до Source.Generatefrom <= Source.GenerateTo используя пока l oop). Наконец, мне нужен список объектов, как показано ниже.

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

Можно ли это сделать с помощью automapper?

Ниже приведен класс профиля mapper с whilel oop. Не уверен, что это правильный подход

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);
     }
 });

1 Ответ

0 голосов
/ 27 января 2020

Вы можете зарегистрировать это отображение для Ваших объектов, если 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...