自动装配复杂对象
本文关键字:复杂 对象 | 更新日期: 2023-09-27 18:10:08
我已经开始实现这个;
自动映射器,映射到一个复杂的对象,但认为一定有更好的方法。
所以我创建了这个;
Mapper.CreateMap<StoreTransportWindow, CSVWindow>()
.ForMember(dest => dest.DC, opt => opt.ResolveUsing(fa => fa.DC.number))
.ForMember(dest => dest.Type, opt => opt.ResolveUsing(fa => fa.Type))
;
Mapper.CreateMap<Store, CSVStore>()
.ForMember(dest => dest.StoreName, opt => opt.ResolveUsing(fa => fa.name))
.ForMember(dest => dest.StoreNumber, opt => opt.ResolveUsing(fa => fa.number))
;
现在我想在主映射中使用上面的映射;
Mapper.CreateMap<Store, CSVLineObject>()
.ForMember( dest => dest.store, opt => opt.ResolveUsing(/* This is where I'd like to use the above Store to CSVStore mapping */))
;
这可能吗?
编辑
public class CSVStore
{
public string StoreNumber { get; set; }
public string StoreName { get; set; }
}
public class CSVWindow
{
public string Type { get; set; }
public string DC { get; set; }
public string TPC { get; set; }
public class CSVLineObject
{
public CSVStore store { get; set; }
public List<CSVWindow> storeWindows { get; set; }
正如评论中提到的,初始映射可能更像:
Mapper.CreateMap<StoreTransportWindow, CSVWindow>()
.ForMember(dest => dest.DC, opt => opt.MapFrom(src => src.DC.number));
// Mapping for property Type not required
Mapper.CreateMap<Store, CSVStore>()
.ForMember(dest => dest.StoreName, opt => opt.MapFrom(src => src.name))
.ForMember(dest => dest.StoreNumber, opt => opt.MapFrom(src => src.number));
现在假设你有以下内容:
public class Source
{
public Store Store { get; set; }
}
public class Destination
{
public CSVStore Store { get; set; }
}
那么下面的映射就足够了(因为您已经定义了嵌套映射Store
到CSVStore
):
Mapper.CreateMap<Source, Destination>();
然而,如果Destination
更像这样:
public class Destination
{
public CSVStore CSVStore { get; set; }
}
那么你需要显式地定义要映射的属性:
Mapper.CreateMap<Source, Destination>()
.ForMember(dest => dest.CSVStore, opt => opt.MapFrom(src => src.Store));
(注意从Store
到CVStore
的映射是自动应用的)
如果出于某种原因你需要显式地定义一个嵌套映射,你可以这样做:
Mapper.CreateMap<Source, Destination>()
.ForMember(dest => dest.destproperty,
opt => opt.MapFrom(
src => Mapper.Map<SrcType, DestType>(src.srcproperty));
我有时需要使用它,但不是经常使用,因为默认功能会自动为您处理它。
如果您能详细说明您的要求,我可以提供更多的细节。