jk's notes
  • Dynamic and ExpandoObject Mapping

Dynamic and ExpandoObject Mapping

在没有配置的情况下, AutoMapper 支持 dynamic 对象的映射.

jk: 算是一个小技巧

  • 可以将字典 Dictionary<string, object> 映射到对象, 键会自动升级为属性名.
  • 可以在字典中使用 带有点语法的键名, 会被映射成子属性.

Demo

public class Foo {
  public int Bar { get; set; }
  public int Baz { get; set; }
  public Foo InnerFoo { get; set; }
}
dynamic foo = new MyDynamicObject();
foo.Bar = 5;
foo.Baz = 6;

var configuration = new MapperConfiguration(cfg => {});

var result = mapper.Map<Foo>(foo);
result.Bar.ShouldEqual(5);
result.Baz.ShouldEqual(6);

dynamic foo2 = mapper.Map<MyDynamicObject>(result);
foo2.Bar.ShouldEqual(5);
foo2.Baz.ShouldEqual(6);

以及

var result = mapper.Map<Foo>(new Dictionary<string, object> { ["InnerFoo.Bar"] = 42 });
result.InnerFoo.Bar.ShouldEqual(42);
Last Updated:
Contributors: jk