简体   繁体   中英

Automapper executes without error, but no data being copied from source to destination

I have a class like this

public class ListOfBMTTeamMapping
{
    public class TeamMapping
    {
        public List<TeamMappings> results { get; set; }
    }
    public class TeamMappings
    {
        public int id { get; set; }
        public string areaPath { get; set; }
        public string agileReleaseTrainName { get; set; }
        public string deliveryTeamName { get; set; }
        public string keyedInTeamCode { get; set; }
        public string deliveryTeamId { get; set; }
        public bool isDeleted { get; set; }
        public string modified { get; set; }
        public string modifiedBy { get; set; }


    }
}

And here is my model class to which I need the above API class to get copied

public class JsonBmtAdoMapping
{
    public int? Id { get; set; }
    public string AreaPath { get; set; }
    public string AgileReleaseTrainName { get; set; }
    public string DeliveryTeamName { get; set; }
    public string KeyedInTeamCode { get; set; }
    public string DeliveryTeamId { get; set; }
    public string IsDeleted { get; set; }
    public DateTime? Modified { get; set; }
    public string ModifiedBy { get; set; }
}

So here is my code I tried

var format = "dd/MM/yyyy"; 
var dateTimeConverter = new IsoDateTimeConverter { DateTimeFormat = format };
ListOfBMTTeamMapping.TeamMapping Results = new ListOfBMTTeamMapping.TeamMapping();
Results = JsonConvert.DeserializeObject<ListOfBMTTeamMapping.TeamMapping>(responseBody);

List<JsonBmtAdoMapping> jM = new List<JsonBmtAdoMapping>();
jM = _mapper.Map<ListOfBMTTeamMapping.TeamMapping,List<JsonBmtAdoMapping>>(Results);
int n = 10;

And here is my automapper profile

        CreateMap<ListOfBMTTeamMapping.TeamMapping, List<JsonBmtAdoMapping>>();
        
        CreateMap<ListOfBMTTeamMapping.TeamMappings, JsonBmtAdoMapping>();

But when the code executes, Ofcourse I am getting the data in results variable without any trouble

But when the mapper code fires, it execute the line without any error, but no data being copied from source to my model class which is the destination

jM.count is always 0 when Results hold 124 rows of data

What I did wrong

Your mapping from TeamMapping to List<JsonBmtAdoMapping> can't be done out of the box by AutoMapper, because your source is an object with a property that contains the list and the destination is a list on itself.

So you have to tell him, how this conversion from a single object to a list can be done. Due to the fact, that you already have a mapping for each individual item, we can use that recursively within our mapping method.

By using this mapping, it should work:

CreateMap<ListOfBMTTeamMapping.TeamMappings, JsonBmtAdoMapping>();
CreateMap<ListOfBMTTeamMapping.TeamMapping, List<JsonBmtAdoMapping>>()
    .ConvertUsing((src, _, context) => src.results.Select(context.Mapper.Map<JsonBmtAdoMapping>).ToList());

Update

Cause a mapper is already defined for the individual items and lists are handled automatically by AutoMapper we can even make it shorter (thanks for Lucian for the hint in the comments):

CreateMap<ListOfBMTTeamMapping.TeamMappings, JsonBmtAdoMapping>();
CreateMap<ListOfBMTTeamMapping.TeamMapping, List<JsonBmtAdoMapping>>()
    .ConvertUsing((src, _, context) => context.Mapper.Map<List<JsonBmtAdoMapping>>(src.results));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM