我不确定我是否想得太多了,但我不能解决这个问题。
这里有一个父对象叫做Template
public Template()
{
public long Id { get; set; }
public Scoring SubProperty { get; set; }
}
这是我的scores对象,它是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配置文件中,我已经这样设置了,将Template转换为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. score . type不是根属性。
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
对象,但在其他情况下,我有可选的属性。如果有人能在这两方面都帮我,那就太好了。
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));