.net core Automapper can';t映射嵌套集合

.net core Automapper can';t映射嵌套集合,.net-core,automapper,.net Core,Automapper,我想知道如何在automapper 9.0.0中进行映射。有人能帮我吗? 我有这些课程 class User { public string Name { get; set; } public Address[] Addresses { get; set; } } class Address { public string StreetName { get; set; } } class UserDto { public string Name { get; s

我想知道如何在automapper 9.0.0中进行映射。有人能帮我吗? 我有这些课程

class User
{
    public string Name { get; set; }
    public Address[] Addresses { get; set; }
}
class Address
{
    public string StreetName { get; set; }
}

class UserDto
{
    public string Name { get; set; }
    public PropertiesDto Properties { get; set; }
}

class PropertiesDto
{
    public AddressDto[] Addresses { get; set; }
}

class AddressDto
{
    public string StreetName { get; set; }
}
我的目标是将地址数组放在一个“PropertiesDto”对象中,最终会有很多其他数组

var user = new User { Name = "Foo", Addresses = new[] { new Address { StreetName = "Main St." } } };

        var config = new MapperConfiguration(cfg =>
        {
            cfg.CreateMap<Address[], AddressDto[]>();
            cfg.CreateMap<User, UserDto>()
                .ForMember(d => d.Properties.Addresses, opt => opt.MapFrom(s => s.Addresses));
        });

        IMapper mapper = new Mapper(config);
        var dtoUser = mapper.Map<UserDto>(user);
        Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(dtoUser));
        
        Console.WriteLine("Hit enter...");
        Console.ReadLine();
var user=newuser{Name=“Foo”,Addresses=new[]{newaddress{StreetName=“Main St.”};
var config=new-MapperConfiguration(cfg=>
{
CreateMap();
cfg.CreateMap()
.ForMember(d=>d.Properties.Addresses,opt=>opt.MapFrom(s=>s.Addresses));
});
IMapper映射器=新映射器(配置);
var dtoUser=mapper.Map(用户);
WriteLine(System.Text.Json.JsonSerializer.Serialize(dtoUser));
Console.WriteLine(“点击回车…”);
Console.ReadLine();
代码失败,并显示此错误消息

未处理的异常。System.ArgumentException:表达式“d=>d.Properties.Addresses”必须解析为顶级成员,而不是任何子对象的属性。您可以使用ForPath,子类型上的自定义解析器或AfterMap选项。(参数“lambdaExpression”)


对我有效的是使用反向映射

var config = new MapperConfiguration(cfg =>
        {
            cfg.CreateMap<Address, AddressDto>();
            cfg.CreateMap<UserDto, User>()
                .ForMember(d => d.Addresses, opt => opt.MapFrom(s => s.Properties.Addresses))
                .ReverseMap();
        });
var config=new-MapperConfiguration(cfg=>
{
CreateMap();
cfg.CreateMap()
.ForMember(d=>d.Addresses,opt=>opt.MapFrom(s=>s.Properties.Addresses))
.ReverseMap();
});

对于这种情况,有一个特殊的命令-如果要映射到顶级以下的属性,则只需使用
.ForPath
(如错误消息所示)代替
.ForMember
。像这样:

        var config = new MapperConfiguration(cfg =>
        {
            cfg.CreateMap<Address[], AddressDto[]>();
            cfg.CreateMap<User, UserDto>()
                .ForPath(d => d.Properties.Addresses, opt => opt.MapFrom(s => s.Addresses));
        });
var config=new-MapperConfiguration(cfg=>
{
CreateMap();
cfg.CreateMap()
.ForPath(d=>d.Properties.Addresses,opt=>opt.MapFrom(s=>s.Addresses));
});

您是否尝试过使用搜索?是的,但显然没有使用正确的搜索词。我现在看到automapper只能映射级别1的对象。