【问题标题】:Automapper .ForMember() syntaxAutomapper .ForMember() 语法
【发布时间】:2011-04-18 17:46:20
【问题描述】:

如果我有两个相似的类在一个属性上有所不同,你能告诉我正确的映射方式吗?

// DatabaseCamper.Gender is string that holds either "M" or "F"
// ViewModelCamper.gender is enum of type Gender

我想应该是这样的:

Mapper.CreateMap<DatabaseCamper, ViewModelCamper>().ForMember(x => x.Gender, ...

你能完成这个sn-p吗?

谢谢。

UPD。或者让我们加一点盐。如果我在映射 Destination 类(本例中为 ViewModelCamper)中有一个属性,而我最初在 Source 类中没有,并且应该计算该值?

【问题讨论】:

标签: c# automapper


【解决方案1】:

使用 IValueResolver(如果要字符串,则使用 IValueFormatter)。例如,假设如果未指定该字段可以为空,因为它简化了错误处理...

public class GenderValueResolver : ValueResolver<string, Gender?>
{
    protected override Gender? ResolveCore(string source)
    {
        if (source.StartsWith("M", System.StringComparison.OrdinalIgnoreCase))
        {
            return Gender.Male;
        }

        else if (source.StartsWith("F", System.StringComparison.OrdinalIgnoreCase))
        {
            return Gender.Female;
        }

        return null;
    }
}

public class GenderValueFormatter : ValueFormatter<Gender?>
{
    protected override string FormatValueCore(Gender? value)
    {
        switch (value)
        {
            case Gender.Male:
                return "M";
            case Gender.Female:
                return "F";
            default:
                return null;
        }
    }
}

用法...

.ForMember(dest => dest.Gender, opt => opt.ResolveUsing(typeof(GenderValueResolver)).FromMember(src => src.Gender))

.ForMember(dest => dest.Pages, opt => opt.AddFormatter<GenderValueFormatter>())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多