我不确定我是否在思考这个问题,但我不能这样做。
我在这里有一个名为Template
的父对象public Template()
{
public long Id { get; set; }
public Scoring SubProperty { get; set; }
}
这是我的Scoring对象,它是Template
的子属性public enum MyEnum : short
{
Basic = 0
}
public Scoring()
{
public MyEnum Type { get; set; }
public string Text { get; set; }
}
我已经定义了一个TemplateModel,我想将其转换为
public TemplateModel()
{
public long Id { get; set; }
public string Type { get; set; }
public string Text { get; set; }
}
在我的AutoMapper个人资料中,我已经设置了这个,将模板转换为TemplateModel。
public class TemplateProfile : Profile
{
protected override void Configure()
{
// converters
this.CreateMap<TemplateType, string>().ConvertUsing(new TemplateTypeConverter());
// models
this.CreateMap<Template, TemplateModel>()
.ForMember(dest => dest.Type, opt => opt.MapFrom(src => src.Scoring.Type))
.ForMember(dest => dest.Text, opt => opt.MapFrom(src => src.Scoring.Text));
}
/// <summary>
/// Convert TemplateType to string
/// </summary>
private class TemplateTypeConverter : ITypeConverter<TemplateType, string>
{
public string Convert(ResolutionContext context)
{
return context.SourceValue.ToString().ToLower();
}
}
}
如何将TemplateModel转换回模板?
如果我添加以下内容,我会得到一个例外,因为dest.Scoring.Type不是root属性。
this.CreateMap<TemplateModel, Template>()
.ForMember(dest => dest.Scoring.Type, opt => opt.MapFrom(src => src.Type))
.ForMember(dest => dest.Scoring.Text, opt => opt.MapFrom(src => src.Text));
任何帮助非常感谢。在这种情况下,Template
必须始终具有Scoring
对象,但在其他情况下,我具有可选属性。如果有人可以帮助我,两者都会很棒。
答案 0 :(得分:6)
this.CreateMap<TemplateModel, Template>()
.ForMember(dest => dest.SubProperty, opt => opt.MapFrom(src => src));
this.CreateMap<TemplateModel, Scoring>()
.ForMember(dest => dest.Type, opt => opt.MapFrom(src => src.Type))
.ForMember(dest => dest.Text, opt => opt.MapFrom(src => src.Text));