c# Automapper 10.1.1创建嵌套类的实例,尽管所有成员都为空



这些就是我的类:

public class Order
{
public string CustomerName { get; set; }
public ICollection<Position> positions;
}
public class Position
{
public string PositionName { get; set; }
public Description Description { get; set; }
}
public class Description
{
public string Text1 { get; set; }
public string Text2 { get; set; }
}
public class OrderDTO
{
public string CustomerName { get; set; }
public ICollection<PositionDTO> positions;
}
public class PositionDTO
{
public string PositionName { get; set; }
public string DescriptionText1 { get; set; }
public string DescriptionText2 { get; set; }
}

我想映射Order ->OrderDTO同时扁平化Description类(所以我使用DescriptionText1和DescriptionText2)映射配置如下:

cfg.CreateMap<Order, OrderDTO>().ReverseMap();
cfg.CreateMap<Position, PositionDTO>().ReverseMap();

如果我创建OrderDTO没有列表属性,我可以管理Automapper不创建列表与

cfg.AllowNullCollections = true;

但是当我像这样创建OrderDTO对象(没有DescriptionTexts)和Map:

var dto = new OrderDTO() { CustomerName = "Customer1", positions = new Collection<PositionDTO>() { new PositionDTO { PositionName = "Position1" } } };
var order = ObjectMapper.Mapper.Map<Order>(dto);

Automapper总是实例化Description类的对象,而我希望它为空。我也试过cfg。AllowNullDestinationValues,但默认为true。

我如何配置Automapper不创建该类的实例,如果每个属性是空的?编辑:我不能简单地忽略DescriptionText属性,因为还有其他情况,我想使用它们提前感谢

多亏了Lucian的提示,我成功地让它与一个显式的反向映射方法一起工作,像这样配置:

cfg.CreateMap<Order, OrderDTO>().ReverseMap();
cfg.CreateMap<Position, PositionDTO>();
cfg.CreateMap<PositionDTO, Position>()
.ForMember(dest => dest.Description, opt => opt.MapFrom(src => src.DescriptionText1 == null ? null : new Description() { Text1=src.DescriptionText1, Text2 = src.DescriptionText2}));

这不是很好,但它适用于我

最新更新