问题
I have this code snippet running on LinqPad (C# program) with Automapper Nuget package 6.1.1 already included:
void Main()
{
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Top, TopDto>().ReverseMap();
});
Mapper.AssertConfigurationIsValid();
var source = new TopDto
{
Id = 1,
Name = "Charlie",
Nicks = new List<string> { "Fernandez", "Others" }
};
var destination = Mapper.Map<Top>(source);
destination.Dump();
}
// Define other methods and classes here
public class Top
{
public Top()
{
Nicks = new List<string>();
}
public int Id { get; set; }
public string Name { get; set; }
public ICollection<string> Nicks { get; }
}
public class TopDto
{
public TopDto()
{
Nicks = new List<string>();
}
public int Id { get; set; }
public string Name { get; set; }
public ICollection<string> Nicks { get; set; }
}
And as you can see we have problems setting the nested Collection (without Setter at all). In theory this should be running fine but it is not adding any element to the Collection.
If we change the collection property adding a public setter, then all is fine.
How can I get a nested collection without adding a public setter or a setter at all?
回答1:
Thanks to @LucianBargaoanu (in the comments) this is solved now, in this way:
void Main()
{
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Top, TopDto>().ReverseMap()
.ForMember(d => d.Nicks, o=>
{
o.MapFrom(s => s.Nicks);
o.UseDestinationValue();
});
});
Mapper.AssertConfigurationIsValid();
var source = new TopDto(new List<string> { "Fernandez", "Others" })
{
Id = 1,
Name = "Charlie"
};
var destination = Mapper.Map<Top>(source);
destination.Dump();
}
// Define other methods and classes here
public class Top
{
public Top()
{
Nicks = new List<string>();
}
public int Id { get; set; }
public string Name { get; set; }
public ICollection<string> Nicks { get; }
}
public class TopDto
{
public TopDto(List<string> nicks)
{
Nicks = nicks;
}
public int Id { get; set; }
public string Name { get; set; }
public ICollection<string> Nicks { get; private set; }
}
Regards.
来源:https://stackoverflow.com/questions/47037827/automapper-nested-collections-without-setter