AutoMapper C#-为目标中所有未映射的字符串设置默认值

问题描述 投票:0回答:2

我是AutoMapper的新手,并尝试将对象转换为更大(意味着更多字段)的对象。我正在寻找一种为所有目的地的字符串字段设置默认值的方法。当前找不到为所有字符串字段定义一般条件的方法。

假设:

  class A
{
    public string a { get; set; }

}

class B
{
    public DateTime DateTime { get; set; }
    public string a { get; set; }
    public string b { get; set; }
    public string c { get; set; }
}

然后使用映射器时:

var config = new MapperConfiguration(cfg => cfg.CreateMap<A, B>());       
            var mapper = config.CreateMapper();
            B map = mapper.Map<B>(new A {a = "f"});

未映射的字符串的值为null。我正在寻找一种将未映射的字符串设置为string.Empty的方法。使用config.ForAllMembers(...)。注意:我知道我可以为每个字段使用特定的ForMember,例如:

 var config = new MapperConfiguration(cfg => cfg.CreateMap<A, B>()
           .ForMember(des => des.b, x=> x.MapFrom(src => string.Empty)));       

但是不是很好。为什么?

  1. 有时我的字段不能保证其值,它可以为null或有效值,因此在这种情况下我需要注意。
  2. 在实际情况下,我有很多字段,因此为每个字段定义这样的规则不是一个舒适的解决方案。

有这种需求的简单解决方案吗?

c# automapper
2个回答
0
投票

一个想法是使用ForAllOtherMembers。

    c.CreateMap<A, B>().ForAllOtherMembers(o=>
    {
        if(((PropertyInfo)o.DestinationMember).PropertyType == typeof(string))
        {
            o.MapFrom(s=>"default");
        }
    });

0
投票

我设法通过以下方式解决:

.ForMember(dest => dest.field, act => act.MapFrom(src => String.IsNullOrEmpty(src.field) ? "N/A" : src.field))
© www.soinside.com 2019 - 2024. All rights reserved.