Я хочу сопоставить словарь или 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());
});
с этим кодом, единственное, что я получаюmapped - это явно указанное свойство, но map.ForAllMembers(m => m.MapAtRuntime())
не влияет на отображение.все остальные свойства имеют значение null / имеют значение по умолчанию.поэтому я мог сам определить свойства и сделать с помощью пользовательского кода отображения, но я подумал, что можно было бы избежать этого.Я читал, что в AutoMapper есть поддержка Dynamic и ExpandoObject , но я не понимаю, как настроить отображение в соответствии с моими потребностями ...
любая помощь очень ценится!:) спасибо!