gpt4 book ai didi

c# - 如何使用 AutoMapper 映射子对象?

转载 作者:太空宇宙 更新时间:2023-11-03 18:59:06 25 4
gpt4 key购买 nike

我不确定我是不是想多了,但我无法证明这一点。

我这里有一个父对象叫做Template

public Template() 
{
public long Id { get; set; }
public Scoring SubProperty { get; set; }
}

这是我的评分对象,它是模板的子属性

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 配置文件中,我已经这样设置了,以将模板转换为模板模型。

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 转换回 Template?

如果我添加以下内容,则会出现异常,因为 dest.Scoring.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));

关于c# - 如何使用 AutoMapper 映射子对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38870807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com