使用AutoMapper将dynamic / Dictionary <string,object =“”>映射到具有某些不同属性名称的类

时间:2018-09-21 14:51:15

标签: c# automapper

我想将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,但是我不知道如何根据我的需要自定义映射...

非常感谢您的帮助! :) 谢谢!

0 个答案:

没有答案