Отображение Automapper из внутреннего свойства в класс назначения
Не могу, кажется, понять это.
public class DestinationClass
{
public int InnerPropertyId { get; set; }
public string StrignValue { get; set; }
}
public class SourceClass
{
public InnerValue Inner { get; set; }
}
public class InnerValue
{
public int InnerPropertyId { get; set; }
public string StrignValue {get;set;}
}
Мне нужно составить карту из SourceClass.Иннервация непосредственно в DestinationClass. Как мне это сделать?
Заранее благодарю.
3 ответа:
Как обычно, сразу после того, как я нажал кнопку post question:
Mapper.Reset(); // from, to Mapper.CreateMap<InnerValue, DestinationClass>(); Mapper.CreateMap<SourceClass, DestinationClass>() .ConvertUsing(s => Mapper.Map<InnerValue, DestinationClass>(s.Inner)); Mapper.AssertConfigurationIsValid(); var source = new SourceClass() { Inner = new InnerValue() { InnerPropertyId = 123, StringValue = "somethinges" } }; var dest = Mapper.Map<SourceClass, DestinationClass>(source);
У нас была проблема с преобразованием, не дающим полностью заполненного результата, потому что наша версия SourceClass имела дополнительное значение, которое мы хотели сопоставить с DestinationClass
Мы обнаружили, что следующий код дает желаемый результат:
{ ... Mapper.CreateMap<InnerValue, DestinationClass>(MemberList.Source); Mapper.CreateMap<SourceClass, DestinationClass>(MemberList.Source) .ConstructUsing(s => Mapper.Map<DestinationClass>(s.Inner)) .ForSourceMember(m => m.Inner, opt => opt.Ignore()); ... } public class DestinationClass { public int InnerPropertyId { get; set; } public string StringValue { get; set; } public string SourceClassValue { get; set; } } public class SourceClass { public string SourceClassValue { get; set; } public InnerValue Inner { get; set; } } public class InnerValue { public int InnerPropertyId { get; set; } public string StrignValue {get;set;} }
ConstructUsing продолжает сопоставлять остальные члены после того, как он сопоставил внутренние члены, а ConvertUsing-нет.