Автоматическое сопоставление динамических объектов без учета регистра имен свойств - PullRequest
0 голосов
/ 01 ноября 2018

Как мне настроить маппер, чтобы он работал?

(т.е. свойства динамического объекта должны соответствовать свойствам определения класса с одинаковыми буквами - без учета регистра)

public class Foo {
    public int Bar { get; set; }
    public int Baz { get; set; }
}

dynamic fooDyn = new MyDynamicObject();
fooDyn.baR = 5;
fooDyn.bAz = 6;

Mapper.Initialize(cfg => {});

Foo result = Mapper.Map<Foo>(fooDyn);
result.Bar.ShouldEqual(5);
result.Baz.ShouldEqual(6);

1 Ответ

0 голосов
/ 01 ноября 2018

Если ваш динамический объект реализует IDictionary<string,object> (например, ExpandoObject), то должно работать следующее. Должен быть более простой способ сделать это, поскольку анонимные объекты отображаются очень хорошо, даже если дело обстоит иначе.

        Mapper.Initialize(cfg =>
        {
            cfg.CreateMap<IDictionary<string, object>, Foo>()
            .ConstructUsing(d =>
            {
                Foo foo = new Foo();

                foreach (System.Reflection.PropertyInfo prop in typeof(Foo).GetProperties())
                {
                    foreach (KeyValuePair<string, object> entry in d)
                    {
                        if (entry.Key.ToLowerInvariant() == prop.Name.ToLowerInvariant())
                        {
                            prop.SetValue(foo, entry.Value);
                            break;
                        }
                    }
                }

                return foo;
            });
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...