Я настоятельно рекомендую использовать Automapper, поскольку он очень прост и удобен в использовании.В Automapper поля с одинаковыми именами отображаются по умолчанию и требуют минимальной настройки.Сопоставление, которое вы хотите получить, будет выполнено следующим образом:
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Message, MessageViewModel>();
});
В случае коллекций Automapper может отобразить следующее при условии, что для их типов данных определена конфигурация:
- IEnumerable
- ICollection
- IList
- Список
- Массивы
Поскольку сопоставление для типов данных уже предусмотреносписков в вашем случае, дальнейшая настройка не потребуется.
Если вы хотите отобразить поля с разными именами или вам нужна некоторая проверка базового уровня в процессе, вы можете использовать следующий синтаксис для определения конфигурации:
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Message, MessageViewModel>()
.ForMember(destination => destination.SomeDestinationField, map => map.MapFrom(source => source.SomeSourceFieldWithDifferentName))
.ForMember(destination => destination.SomeDestinationField, map => map.MapFrom(source => source.SomeSourceField ?? SomeDefaultValue));
});
Затем мы можемиспользуйте объект MapperConfiguration для инициализации Mapper и выполните наши отображения следующим образом:
SourceClass SourceObject = new SourceClass();
// Populate SourceObject with values
var mapper = config.CreateMapper();
DesitnationClass DestinationObject = mapper.Map<DesitnationClass>(SourceObject);
Я бы порекомендовал просмотреть эти документы .