AutoMapper 支持动态对象相互映射,不需要编写任何显式映射配置。
using AutoMapper;
using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
dynamic foo = new ExpandoObject();
foo.Bar = 5;
foo.Baz = 6;
Mapper.Initialize(cfg => { });
var result = Mapper.Map<Foo>(foo);
result.Bar = 500;
result.Baz = 222;
dynamic foo2 = Mapper.Map<ExpandoObject>(result);
Console.WriteLine(foo2.Bar);
Console.ReadKey();
}
}
public class Foo
{
public int Bar { get; set; }
public int Baz { get; set; }
}
}Code language: JavaScript (javascript)
同样,也可以直接从 Dictionary<string, object> 映射到实体对象,AutoMapper 会按照属性名称匹配字典里面的键。
说明:
ExpandoObject动态对象转普通实体:按属性名自动匹配赋值,无需CreateMap。- 普通实体转
ExpandoObject:实体属性变成动态对象的字段。Dictionary<string,object>映射实体:字典的 key 和实体属性名称对应,完成赋值。