动态对象映射

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 会按照属性名称匹配字典里面的键。

说明:

  1. ExpandoObject 动态对象转普通实体:按属性名自动匹配赋值,无需 CreateMap
  2. 普通实体转 ExpandoObject:实体属性变成动态对象的字段。
  3. Dictionary<string,object> 映射实体:字典的 key 和实体属性名称对应,完成赋值。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注