Я пытаюсь отобразить один объект на внутренний объект, который является списком. В основном это отображение ответа от внешнего API и его синтаксический анализ на наш общий c ответ API
исходный объект
public class ShipmentEntity
{
public virtual long Id { get; set; }
public virtual string OrderId { get; set; }
.....
}
целевой объект
public class DeliveryLabelResponse
{
public bool Success { get; set; }
public DeliveryLabel Label { get; set; }
public Exception Error { get; set; }
}
}
public class DeliveryLabel
{
public ShippingOption Option { get; set; } = new ShippingOption();
public List<ShippingOptionLabel> Label { get; set; }= new List<ShippingOptionLabel>();
}
public class ShippingOptionLabel
{
public string ShippingProvider { get; set; }
public virtual string Message { get; set; }
....
}
простая карта
CreateMap<ShipmentEntity, DeliveryLabelResponse>()
.ForMember(des => des.Label.Label, x => x.MapFrom(src => src))
Выражение 'des => des.Label.Label' должно преобразовываться в элемент верхнего уровня, а не в свойства любого дочернего объекта. Вместо этого вы можете использовать ForPath, пользовательский преобразователь для дочернего типа или параметр AfterMap.
для пути
CreateMap<ShipmentEntity, DeliveryLabelResponse>()
.ForPath(des => des.Label.Label, opt => opt.MapFrom(src => src))
.ForMember(des => des.Success, x => x.MapFrom(src => true))
.ForMember(des => des.Error, x => x.MapFrom(src => src));
Несопоставленные свойства:
Метка
для попытки два пути
CreateMap<ShipmentEntity, DeliveryLabelResponse>()
.ForPath(des => des.Label, opt => new DeliveryLabel())
.ForPath(des => des.Label.Label, opt => new List<ShippingOptionLabel>() { new ShippingOptionLabel() { }})
.ForMember(des => des.Success, x => x.MapFrom(src => true))
.ForMember(des => des.Error, x => x.MapFrom(src => src));
Test_unit.Mapping.AutoMapperTests.Mapping_config_is_valid
System.NullReferenceException: ссылка на объект не установлена для экземпляра объект.
Рассмотрим ConvertUsing
Не будет работать на все, потому что мой источник не является списком, его назначение является списком.
.ConvertUsing(source => source.Prices?.Select(p => new PriceDto
{
Ticker = source.Security?.Ticker,
Open = p.Open,
Close = p.Close
}).ToList()
);