C# 从其他源集合类型自动映射
给定下面的类,我需要建立从Person到PersonDTO的映射。我遇到的问题是PersonDTO的地址字段映射没有发生C# 从其他源集合类型自动映射,c#,asp.net-mvc,automapper,dto,C#,Asp.net Mvc,Automapper,Dto,给定下面的类,我需要建立从Person到PersonDTO的映射。我遇到的问题是PersonDTO的地址字段映射没有发生 public class Address { public int Id { get; set; } public string Value { get; set; } } public class RegisteredAddresses { public int Id { get; set; } public List<Address
public class Address
{
public int Id { get; set; }
public string Value { get; set; }
}
public class RegisteredAddresses
{
public int Id { get; set; }
public List<Address> Addresses { get; set; }
public RegisteredAddresses()
{
this.Addresses = new List<Address>();
}
}
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public List<RegisteredAddresses> AddressGroups { get; set; }
public Person()
{
this.AddressGroups = new List<RegisteredAddresses>();
}
}
public class PersonDTO
{
public string Name { get; set; }
public List<Address> Addresses { get; set; }
public PersonDTO()
{
this.Addresses = new List<Address>();
}
}
class Program
{
static void Main(string[] args)
{
RegisteredAddresses registeredAddresses1 = new RegisteredAddresses();
RegisteredAddresses registeredAddresses2 = new RegisteredAddresses();
Person person = new Person();
registeredAddresses1.Addresses.Add(new Address { Id = 1, Value = "address 1" });
registeredAddresses1.Addresses.Add(new Address { Id = 2, Value = "address 2" });
registeredAddresses1.Addresses.Add(new Address { Id = 3, Value = "address 3" });
registeredAddresses1.Addresses.Add(new Address { Id = 4, Value = "address 4" });
registeredAddresses1.Addresses.Add(new Address { Id = 5, Value = "address 5" });
registeredAddresses2.Addresses.Add(new Address { Id = 1, Value = "address A" });
registeredAddresses2.Addresses.Add(new Address { Id = 2, Value = "address B" });
registeredAddresses2.Addresses.Add(new Address { Id = 3, Value = "address C" });
registeredAddresses2.Addresses.Add(new Address { Id = 4, Value = "address D" });
registeredAddresses2.Addresses.Add(new Address { Id = 5, Value = "address E" });
person.Name = "person 1";
person.AddressGroups.Add(registeredAddresses1);
person.AddressGroups.Add(registeredAddresses2);
Mapper.CreateMap<Person, PersonDTO>();
// after this line....
var personDto = Mapper.Map<Person, PersonDTO>(person);
// .... personDTO.Addresses.Count() is zero; where it should be 10
}
}
公共类地址
{
公共int Id{get;set;}
公共字符串值{get;set;}
}
公共类注册地址
{
公共int Id{get;set;}
公共列表地址{get;set;}
公共注册地址()
{
this.Addresses=新列表();
}
}
公共阶层人士
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共列表地址组{get;set;}
公众人士()
{
this.AddressGroups=新列表();
}
}
公共类个人
{
公共字符串名称{get;set;}
公共列表地址{get;set;}
公众人物
{
this.Addresses=新列表();
}
}
班级计划
{
静态void Main(字符串[]参数)
{
RegisteredAddresses registeredAddresses1=新的RegisteredAddresses();
RegisteredAddresses registeredAddresses2=新的RegisteredAddresses();
Person=新人();
Add(新地址{Id=1,Value=“Address 1”});
registeredAddresses1.Addresses.Add(新地址{Id=2,Value=“Address 2”});
registeredAddresses1.Addresses.Add(新地址{Id=3,Value=“Address 3”});
registeredAddresses1.Addresses.Add(新地址{Id=4,Value=“Address 4”});
registeredAddresses1.Addresses.Add(新地址{Id=5,Value=“Address 5”});
registeredAddresses2.Addresses.Add(新地址{Id=1,Value=“地址A”});
Add(新地址{Id=2,Value=“Address B”});
registeredAddresses2.Addresses.Add(新地址{Id=3,Value=“Address C”});
Add(新地址{Id=4,Value=“Address D”});
registeredAddresses2.Addresses.Add(新地址{Id=5,Value=“Addresse”});
person.Name=“person 1”;
person.AddressGroups.Add(registeredAddresses1);
person.AddressGroups.Add(registeredAddresses2);
CreateMap();
//在这一行之后。。。。
var personDto=Mapper.Map(个人);
//..personDTO.Addresses.Count()为零;其中应为10
}
}
您需要告诉AutoMapper如何将地址组中包含的地址映射到PersonDTO
中的地址。比如:
Mapper.CreateMap<Person, PersonDTO>()
.ForMember(pd => pd.Addresses,
opt => opt.ResolveUsing(p => p.AddressGroups
.SelectMany(ra => ra.Addresses)
)
);
Mapper.CreateMap()
.FormMember(pd=>pd.地址,
opt=>opt.ResolveUsing(p=>p.AddressGroups
.SelectMany(ra=>ra.Addresses)
)
);