Источники для моего места назначения указаны в корневом dto и его дочернем свойстве:
public class Source {
public AccountSource {get;set;}
public string AccountKey {get;set;}
public string AccountPassword {get;set;}
}
public class AccountSource {
public Guid Id { get; set; }
public string Name { get; set; }
}
public class Dest
{
public Account Account { get; set; }
public class Account
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Password { get; set; }
public string Key { get; set; }
}
}
В настоящее время у меня есть такое отображение:
CreateMap<Source, Dest>()
.ForPath(x => x.Account.Id, o => o.MapFrom(x => x.Account.Id))
.ForPath(x => x.Account.Name, o => o.MapFrom(x => x.Account.Name))
.ForPath(x => x.Account.Key, o => o.MapFrom(x => x.AccountKey))
.ForPath(x => x.Account.Password, o => o.MapFrom(x => x.AccountPassword));
CreateMap<AccountSource, Dest.Account>()
.ForAllMembers(x => x.Ignore());
, но у него есть одна проблема: новые членыдобавленный к Dest.Account
не будет проверен.
Если удалить ForPath
и просто оставить
CreateMap<Source, Dest>();
CreateMap<AccountSource, Dest.Account>();
, тогда пароль и ключ не отображаются, поэтому я должен игнорировать их в такихway CreateMap<AccountSource, Dest.Account>().ForMember(x => x.Password, x=> x.Ignore()).ForMember(x => x.Key, x=> x.Ignore())
.
Но тогда отмена раскладывания не работает (реквизиты абсолютно игнорируются, а не только когда происходит аккаунт → сопоставление аккаунта).