尝试将AutoMapper与列表一起使用会返回错误“索引超出范围”。

问题描述 投票:-1回答:1

我一直在尝试使AutoMapper与列表一起工作,但每当我尝试这样时,它总是返回相同的错误:

指数超出范围。必须是非负数且小于集合的大小。\ r \ nParameter name:index

我简化了代码,但基本上,这些是我要映射到的类:

public class PlayerCar
{
    public string Manufacturer { get; set; }
    public string Name { get; set; }
}

public class Player
{
    public List<PlayerCar> Cars { get; set; }
    public string OwnerName { get; set; }
    public string OwnerUsername { get; set; }
}

这些是源类:

public class Users
{
    public int Id { get; set; }
    public string Username { get; set; }
    public Account User { get; set; }
}

public class Account 
{
    public string Name { get; set; }
    public List<UserCar> Cars { get; set; }
}

public class UserCar
{
    public string Manufacturer { get; set; }
    public string Name { get; set; }
    public int Year { get; set; }
    public string Colour { get; set; }
}

这是我一直在使用的映射器配置:

CreateMap<Users, Player>()
    .ForMember(c => c.OwnerUsername, opt => opt.MapFrom(c => c.Username))
    .ForMember(c => c.OwnerName, opt => opt.MapFrom(c => c.User.Name))
    .ForMember(c => c.Cars, opt => opt.MapFrom(c => c.User.Cars));

CreateMap<UserCar, PlayerCar>()
    .ForMember(c => c.Manufacturer, opt => opt.MapFrom(c => c.Manufacturer))
    .ForMember(c => c.Name, opt => opt.MapFrom(c => c.Name));

我不知道这是否会影响任何事情,但我一直在做.ProjectTo<Player>(_mapper.ConfigurationProvider).

有谁知道如何解决这个问题?

c# list automapper mapper
1个回答
0
投票

列表是否在任何地方初始化?

你不必为播放器制作用户车的单独显式映射吗?我不认为它会允许嵌套映射。

CreateMap<Player, Account>()
     .ForMember(p => p.Cars, opts => opts.MapFrom(a => a.Cars))

... ForMember(c => c.Cars, opt => opt.MapFrom(c => c.User));
© www.soinside.com 2019 - 2024. All rights reserved.