public Class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public List<Address> Addresses {get;set}
public DateTime CreatedOn { get; set; }
public string CreatedBy { get; set; }
}
public class Address
{
public string StreeNo { get; set; }
public string Town { get; set; }
public DateTime CreatedOn { get; set; }
public string CreatedBy { get; set; }
}
我需要将其映射到不应具有CreatedOn和CreatedBy自动映射器的动态对象,我已经看到了使用
的示例public static List<T> MapDynamicList<T>(IEnumerable<object> obj)
{
var config = new MapperConfiguration(c => c.CreateMissingTypeMaps = true);
var mapper = config.CreateMapper();
var newModel = obj.Select(mapper.Map<T>).ToList();
return newModel;
}
但是此映射具有与源相同的属性,因为我不希望将CreatedOn和CreatedBy复制到目标
所有这些原因背后的原因是,我试图创建一个没有提到属性的视图模型,因为我所有的类都具有CreatedOn Created By,并且随着类的更新,很难为每个模型手动创建视图模型。
我们将不胜感激
答案 0 :(得分:0)
如果您在目的地不需要这些属性,则只需创建不具有此类属性的viewmodel :)
public class AddressViewModel
{
public string StreeNo { get; set; }
public string Town { get; set; }
}
public Class PersonViewModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public AddressViewModel[] Addresses { get; set; }
}
// Automapper profile
CreateMap<Address, AddressViewModel();
CreateMap<Person, PersonViewModel>();
// Usage
var personViewModelList = MapDynamicList<PersonViewModel>(persons);
您也可以使用Automapper .Ignore()
,但是使用显式ViewModel类的解决方案似乎更加清晰。
顺便说一句,您不需要使用LINQ。选择以映射IEnumerable
,Automapper可以映射集合,所以代替此:
var newModel = obj.Select(mapper.Map<T>).ToList();
您可以这样做:
var newModel = mapper.Map<List<T>>(obj);
这会将每个对象映射到T
,然后将它们放入列表中。