我是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)));
但这不是很好。为什么?
有这样一种简单的解决方案吗?
答案 0 :(得分:0)
一个想法是使用ForAllOtherMembers。
c.CreateMap<A, B>().ForAllOtherMembers(o=>
{
if(((PropertyInfo)o.DestinationMember).PropertyType == typeof(string))
{
o.MapFrom(s=>"default");
}
});
答案 1 :(得分:0)
我设法通过以下方式解决:
.ForMember(dest => dest.field, act => act.MapFrom(src => String.IsNullOrEmpty(src.field) ? "N/A" : src.field))