我想将Dictionary或ExpandoObject映射到类。
问题在于该类具有不同的名称,这些名称应由AutoMapper通过RecognizePrefixes("SomePrefix")
识别,并且某些属性应“手动”映射。我想使“手工”部分保持接近零,并将映射和属性检测的内容留给AutoMapper。
一个例子:
class MyClass
{
public Guid Id { get; set; }
public string Name { get; set; }
public string OtherPropName { get; set; }
}
var d = new Dictionary<string, object>
{
{ "SomePrefixId", Guid.NewGuid() },
{ "SomePrefixName", "My Name" },
{ "SomePrefixProp", "Some Value" },
}
var customMap = new Dictionary<string, string>
{
{ nameof(MyClass.OtherPropName), "SomePrefixProp" },
};
var config = new MapperConfiguration(c =>
{
c.RecognizePrefixes(prefix);
var map = c.CreateMap<IDictionary<string, object>, MyClass>(MemberList.Destination);
if (customMap != null)
{
foreach (var pair in customMap)
{
map.ForMember(pair.Key, m => m.MapFrom(src => src[pair.Value]));
}
}
map.ForAllMembers(m => m.MapAtRuntime());
});
使用此代码,我唯一要映射的是明确指定的属性,但是map.ForAllMembers(m => m.MapAtRuntime())
对映射没有影响。所有其他属性均为null /具有其默认值。所以我可以自己确定属性并使用自定义映射代码,但是我认为有可能避免这种情况。
我读到AutoMapper中有Dynamic和ExpandoObject support,但是我不知道如何根据我的需要自定义映射...
非常感谢您的帮助! :) 谢谢!