C# Automapper中属性的首选项层次结构

C# Automapper中属性的首选项层次结构,c#,.net,mapping,automapper,C#,.net,Mapping,Automapper,是否可以设置automapper,以便如果来自lambda的映射结果为null/抛出一个NRE,它将查看不同的源。我目前的要求非常基本,因此我能够做到: .ForMember(a=>a.CountryOfRisk, m=>m.MapFrom(a=>(a.CountryOfRisk??a.Issuer.CountryOfRisk).CountryCode)) 但实际上我希望能够做到的是: a=>a.CountryOfRisk, m=>m.MapFrom(a=>

是否可以设置automapper,以便如果来自lambda的映射结果为null/抛出一个NRE,它将查看不同的源。我目前的要求非常基本,因此我能够做到:

.ForMember(a=>a.CountryOfRisk, m=>m.MapFrom(a=>(a.CountryOfRisk??a.Issuer.CountryOfRisk).CountryCode))
但实际上我希望能够做到的是:

a=>a.CountryOfRisk, m=>m.MapFrom(a=>a.CountryOfRisk.CountryCode)
                        .Coalesce(a=>a.Issuer.CountryOfRisk.CountryCode))

这意味着我可以创建一整套项目,这些项目将以一种漂亮的、基于配置的、易于阅读的格式填充输出字段。

可以执行以下自定义解析器:

public class CustomResolver : ValueResolver<Source, string>
{
    protected override string ResolveCore(Source source)
    {
        return source.CountryOfRisk ?? source.Issuer.CountryOfRisk;
    }
}

Mapper.Initialize(cfg => 
   cfg.CreateMap<Source, Destination>()
       .ForMember(dest => dest.CountryOfRisk, opt => opt.ResolveUsing<CustomResolver>());
公共类CustomResolver:ValueResolver
{
受保护的重写字符串ResolveCore(源)
{
返回source.CountryOfRisk??source.Issuer.CountryOfRisk;
}
}
Mapper.Initialize(cfg=>
cfg.CreateMap()
.ForMember(dest=>dest.CountryOfRisk,opt=>opt.resolvesusing());

IValueResolver
已弃用?
ValueResolver
应该可以工作)。

可以执行此自定义解析器:

public class CustomResolver : ValueResolver<Source, string>
{
    protected override string ResolveCore(Source source)
    {
        return source.CountryOfRisk ?? source.Issuer.CountryOfRisk;
    }
}

Mapper.Initialize(cfg => 
   cfg.CreateMap<Source, Destination>()
       .ForMember(dest => dest.CountryOfRisk, opt => opt.ResolveUsing<CustomResolver>());
公共类CustomResolver:ValueResolver
{
受保护的重写字符串ResolveCore(源)
{
返回source.CountryOfRisk??source.Issuer.CountryOfRisk;
}
}
Mapper.Initialize(cfg=>
cfg.CreateMap()
.ForMember(dest=>dest.CountryOfRisk,opt=>opt.resolvesusing());

IValueResolver
已弃用?
ValueResolver
应该可以工作).

谢谢。这对更复杂的项目很有用,但我正在寻找一些更内置的东西,它只允许我设置优先顺序并选择第一个非空/非例外的答案。也许我应该停止懒惰,自己构建并提交它!谢谢。这对更复杂的项目很有用,但我正在寻找一些更内置的东西,只允许我设置优先顺序并选择第一个非空/非例外答案。也许我应该停止懒惰,自己构建并提交它!