Automapper 8.0+ все datetime в utc - PullRequest
1 голос
/ 16 июня 2020

Я хотел бы сопоставить все свойства неуказанного типа datetime с типом UT C, просто добавив вид в datetime для сопоставлений всех свойств для Automapper 8.0, я нашел некоторые, возможно, рабочие решения, но они предназначены для более старых версий Automapper которые используют ResolveUsing вместо MapFrom (). Как этого добиться?

cfg.ForAllPropertyMaps(map => map.TypeMap.SourceType is IDbType && (map.SourceType == typeof(DateTime?) || map.SourceType == typeof(DateTime)), (map, expression) => { expression.ResolveUsing(o => { return #DO_WHATEVER_YOU_NEED# }); }); 

Я хочу сопоставить только все сущности и даты с сервера-> клиента, чтобы добавить Ut c Kind, приведенный выше код взят из github.com/AutoMapper/AutoMapper/issues / 1650

1 Ответ

1 голос
/ 16 июня 2020

Вы можете использовать ConvertUsing() для записи CreateMap() для типа DateTime. Код может выглядеть так:

cfg.CreateMap<DateTime, DateTime>().ConvertUsing((s, d) => {
    return DateTime.SpecifyKind(s, DateTimeKind.Utc);
});

Проверьте следующий пример кода:

class TestDTO {
    public DateTime SomeProp {get; set;}
}

class Program
{
    static void Main(string[] args)
    {
        var config = new MapperConfiguration(cfg => {
            cfg.CreateMap<TestDTO, TestDTO>();
            cfg.CreateMap<DateTime, DateTime>().ConvertUsing((s, d) => {
                return DateTime.SpecifyKind(s, DateTimeKind.Utc);
            });
        });
        TestDTO dto = new TestDTO {
            SomeProp = DateTime.Today
        };
        var mapper = new Mapper(config);
        DateTime now = dto.SomeProp;
        Console.WriteLine($"{now} - {now.Kind}");
        TestDTO changed = mapper.Map<TestDTO>(dto);
        DateTime nowWithKind = changed.SomeProp;
        Console.WriteLine($"{nowWithKind} - {nowWithKind.Kind}");            
    }  
}

Это даст следующий результат:

6/16/2020 12:00:00 AM - Local
6/16/2020 12:00:00 AM - Utc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...