[英]Automapper Map Nested List Object to Same Object as Parent
我有三個對象, Parent
, Child
和NewObject
。 由於我棄用Parent
中的字段時的一些中介工作, Child
與Parent
基本相同。 目前, Parent
映射到NewObject
就好了,但我還需要 map Parent
到NewObject
的Child
對象的內部列表,因此映射返回NewObject
的列表。 下面是一個例子
public class Parent {
public string Code { get; set; }
public string Name { get; set; }
public List<Child> Children { get; set; }
}
public class Child {
public string Code { get; set; }
public string Name { get; set; }
}
public class New {
public string NewCode { get; set; }
public string NewName { get; set; }
}
所以如果我有以下Parent
object:
{
"code": "abcd",
"name": "parent",
"children": [
{
"code": "efg",
"name": "child1"
},
{
"code": "xyz",
"name": "child2"
}
]
}
當我 map 它到NewObject
時,結果應該是
[
{
"newCode": "abcd",
"newName": "parent"
},
{
"newCode": "efg",
"newName": "child1"
},
{
"newCode": "xyz",
"newName": "child2"
}
]
有沒有辦法只使用 Automapper 來做到這一點? 還是我需要使用額外的方法?
沒有直接的方法可以做到這一點,沒有AutoMapper
你可以嘗試這樣的事情。
public static List<Child> ToNew(Parent parent) {
List<Child> result = parent.Children.ToList();
result.Insert(0, new Child{
Name = parent.Name, Code = parent.Code
});
return result;
}
這將為您提供Child
對象List
,然后您可以 map 將其添加到New
對象List
。
CreateMap<List<Child>, List<New>>();
或者您可以按如下方式使用AutoMapper
。 首先將以下映射添加到您的映射配置文件。
public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<Parent, List<New>>()
.AfterMap((src, dest, context) => context.Mapper.Map(src.Children, dest));
CreateMap<Child, New>()
.ForMember(dest => dest.NewName, opt => opt.MapFrom(src => src.Name))
.ForMember(dest => dest.NewCode, opt => opt.MapFrom(src => src.Code));
CreateMap<Parent, New>()
.ForMember(dest => dest.NewName, opt => opt.MapFrom(src => src.Name))
.ForMember(dest => dest.NewCode, opt => opt.MapFrom(src => src.Code));
}
}
然后使用配置文件創建映射器。
// Manually create the mapper using the Profile
var mapper = new MapperConfiguration(cfg => cfg.AddProfile(new MappingProfile())).CreateMapper();
現在您可以使用以下方法將Parent
轉換為List<New>
var myFlattened = mapper.Map<Parent, List<New>>(parent);
Map 父屬性也為New
並將其插入到第一個列表中。
var myFlattenedParent = mapper.Map<Parent, New>(parent);
myFlattened.Insert(0, myFlattenedParent);
完整代碼可在此處獲得。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.