c# - 自动映射器复杂对象

标签 c# automapper

我已经开始实现了;
Automapper, mapping to a complex object但认为一定有更好的方法。

所以我创造了这个;

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; }
}

那么以下映射就足够了(因为您已经定义了嵌套映射 StoreCSVStore):

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));

(请注意,从 StoreCVStore 的映射是自动应用的。)

如果出于某种原因你确实需要显式定义嵌​​套映射,你可以这样做:

Mapper.CreateMap<Source, Destination>()
    .ForMember(dest => dest.destproperty,
               opt => opt.MapFrom(
                   src => Mapper.Map<SrcType, DestType>(src.srcproperty));

我有时需要使用它,但不是很频繁,因为默认功能会自动为您处理。

如果您可以扩展您的要求,我可以根据需要提供更多详细信息。

关于c# - 自动映射器复杂对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16095832/

相关文章:

c# - 更改 LambdaExpression 中的参数名称只是为了显示

c# - 如何展平自动映射器列表中的条件对象

.net - Automapper IList-方法实现中主体的签名和声明不匹配

c# 到 json 无法在 View 中正确呈现

c# - 如何使用后请求从 Windows 窗体打开网站?

c# - EF delete 尝试更新外键

c# - AutoMapper - 可空和不可空整数的不同 ProjectUsings

c# - 将原始处理程序的事件参数传递给 wpf 中的路由事件

c# - AutoMapper:一对多 -> 多对多

c# - AutoMapper C# 运行时映射取决于对象属性