博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AutoMapper 自动映射工具
阅读量:6122 次
发布时间:2019-06-21

本文共 7378 字,大约阅读时间需要 24 分钟。

先引用对应的DLL.

11.转换匿名对象 结合LINQ映射新的实体类.

 

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
using AutoMapper;
using System.Data;

namespace ConsoleApplication1

{
    class Program
    {
        static void Main(string[] args)
        {
            //1.普通转换
            Name name1 = new Name() { FirstName = "L", LastName = "jz" };
            Mapper.CreateMap<Name, NameDto>()
                .BeforeMap((name, nameDto) => Console.WriteLine("hello world before"))
                .AfterMap((name, nameDto) => Console.WriteLine("hello world after"));
            NameDto nameDto1 = Mapper.Map<Name, NameDto>(name1);
            Console.WriteLine("1");
            Console.WriteLine(nameDto1.FirstName + nameDto1.LastName);
            Console.WriteLine();
            //Console.ReadKey();

            //整体设置

            //2.整体即时转换
            Mapper.Reset();
            Name name2 = new Name() { FirstName = "L", LastName = "jz" };
            Mapper.CreateMap<Name, NameDto>()
                .ConstructUsing(name => new NameDto() { AllName = name.FirstName + name.LastName });
            NameDto nameDto2 = Mapper.Map<Name, NameDto>(name2);
            Console.WriteLine("2");
            Console.WriteLine(nameDto2.AllName);
            Console.WriteLine();
            //Console.ReadKey();

            //3.整体通过TypeConverter类型转换

            Mapper.Reset();
            Name name3 = new Name() { FirstName = "L", LastName = "jz" };
            Mapper.CreateMap<Name, NameDto>()
                .ConvertUsing<NameConverter>();
            NameDto nameDto3 = Mapper.Map<Name, NameDto>(name3);
            Console.WriteLine("3");
            Console.WriteLine(nameDto3.AllName);
            Console.WriteLine();
            //Console.ReadKey();

            //单属性设置

            //4.属性条件转换
            Mapper.Reset();
            Name name4 = new Name() { FirstName = "L", LastName = "jz" };
            Mapper.CreateMap<Name, NameDto>()
                .ForMember(name => name.FirstName, opt => opt.Condition(name => !name.FirstName.Equals("l", StringComparison.OrdinalIgnoreCase)));
            NameDto nameDto4 = Mapper.Map<Name, NameDto>(name4);
            Console.WriteLine("4");
            Console.WriteLine(string.IsNullOrEmpty(nameDto4.FirstName));
            Console.WriteLine();
            //Console.ReadKey();

            //5.属性忽略

            Mapper.Reset();
            Name name5 = new Name() { FirstName = "L", LastName = "jz" };
            Mapper.CreateMap<Name, NameDto>()
                .ForMember(name => name.FirstName, opt => opt.Ignore());
            NameDto nameDto5 = Mapper.Map<Name, NameDto>(name5);
            Console.WriteLine("5");
            Console.WriteLine(string.IsNullOrEmpty(nameDto5.FirstName));
            Console.WriteLine();
            //Console.ReadKey();

            //6.属性转换

            Mapper.Reset();
            Name name6 = new Name() { FirstName = "L", LastName = "jz" };
            Mapper.CreateMap<Name, NameDto>()
                .ForMember(name => name.AllName, opt => opt.MapFrom(name => name.FirstName + name.LastName));
            NameDto nameDto6 = Mapper.Map<Name, NameDto>(name6);
            Console.WriteLine("6");
            Console.WriteLine(nameDto6.AllName);
            Console.WriteLine();
            //Console.ReadKey();

            //7.属性通过ValueResolver转换

            Mapper.Reset();
            Name name7 = new Name() { FirstName = "L", LastName = "jz" };
            Mapper.CreateMap<Name, StoreDto>()
                .ForMember(storeDto => storeDto.Name, opt => opt.ResolveUsing<NameResolver>());
            StoreDto store1 = Mapper.Map<Name, StoreDto>(name7);
            Console.WriteLine("7");
            Console.WriteLine(store1.Name.FirstName + store1.Name.LastName);
            Console.WriteLine();
            //Console.ReadKey();

            //8.属性填充固定值

            Mapper.Reset();
            Name name8 = new Name() { FirstName = "L", LastName = "jz" };
            Mapper.CreateMap<Name, NameDto>()
                .ForMember(name => name.AllName, opt => opt.UseValue<string>("ljzforever"));
            NameDto nameDto8 = Mapper.Map<Name, NameDto>(name8);
            Console.WriteLine("8");
            Console.WriteLine(nameDto8.AllName);
            Console.WriteLine();
            //Console.ReadKey();

            //9.属性格式化

            Mapper.Reset();
            Name name9 = new Name() { FirstName = "L", LastName = "jz" };
            Mapper.CreateMap<Name, NameDto>()
                .ForMember(name => name.FirstName, opt => opt.AddFormatter<StringFormatter>());
            NameDto nameDto9 = Mapper.Map<Name, NameDto>(name9);
            Console.WriteLine("9");
            Console.WriteLine(nameDto9.FirstName);
            Console.WriteLine();
            //Console.ReadKey();

            //10.属性null时的默认值

            Mapper.Reset();
            Name name10 = new Name() { FirstName = "L" };
            Mapper.CreateMap<Name, NameDto>()
                .ForMember(name => name.LastName, opt => opt.NullSubstitute("jz"));
            NameDto nameDto10 = Mapper.Map<Name, NameDto>(name10);
            Console.WriteLine("10");
            Console.WriteLine(nameDto10.LastName);
            Console.WriteLine();
            //Console.ReadKey();

            //其它设置与特性

            //11.转换匿名对象
            Mapper.Reset();
            object name11 = new { FirstName = "L", LastName = "jz" };
            NameDto nameDto11 = Mapper.DynamicMap<NameDto>(name11);
            Console.WriteLine("11");
            Console.WriteLine(nameDto11.FirstName + nameDto11.LastName);
            Console.WriteLine();
            //Console.ReadKey();

            //12.转换DataTable

            Mapper.Reset();
            DataTable dt = new DataTable();
            dt.Columns.Add("FirstName", typeof(string));
            dt.Columns.Add("LastName", typeof(string));
            dt.Rows.Add("L", "jz");
            List<NameDto> nameDto12 = Mapper.DynamicMap<IDataReader, List<NameDto>>(dt.CreateDataReader());
            Console.WriteLine("12");
            Console.WriteLine(nameDto12[0].FirstName + nameDto12[0].LastName);
            Console.WriteLine();
            //Console.ReadKey();
            //emitMapper error
            //List<NameDto> nameDto20 = EmitMapper.ObjectMapperManager.DefaultInstance.GetMapper<IDataReader, List<NameDto>>().Map(dt.CreateDataReader());

            //13.转化存在的对象
            Mapper.Reset();
            Mapper.CreateMap<Name, NameDto>()
                .ForMember(name => name.LastName, opt => opt.Ignore());
            Name name13 = new Name() { FirstName = "L" };
            NameDto nameDto13 = new NameDto() { LastName = "jz" };
            Mapper.Map<Name, NameDto>(name13, nameDto13);
            //nameDto13 = Mapper.Map<Name, NameDto>(name13);//注意,必需使用上面的写法,不然nameDto13对象的LastName属性会被覆盖
            Console.WriteLine("13");
            Console.WriteLine(nameDto13.FirstName + nameDto13.LastName);
            Console.WriteLine();
            //Console.ReadKey();

            //14.Flatten特性

            Mapper.Reset();
            Mapper.CreateMap<Store, FlattenName>();
            Store store2 = new Store() { Name = new Name() { FirstName = "L", LastName = "jz" } };
            FlattenName nameDto14 = Mapper.Map<Store, FlattenName>(store2);
            Console.WriteLine("14");
            Console.WriteLine(nameDto14.NameFirstname + nameDto14.NameLastName);
            Console.WriteLine();
            //Console.ReadKey();

            //15.将Dictionary转化为对象,现在还不支持

            Mapper.Reset();
            Mapper.CreateMap<Dictionary<string, object>, Name>();
            Dictionary<string, object> dict = new Dictionary<string, object>();
            dict.Add("FirstName", "L");
            //Name name15 = Mapper.DynamicMap<Dictionary<string, object>, Name>(dict);
            Name name15 = Mapper.Map<Dictionary<string, object>, Name>(dict);
            Console.WriteLine("15");
            Console.WriteLine(name15.FirstName);
            Console.WriteLine();
            Console.ReadKey();
        }
    }

    

    public class Store
    {
        public Name Name { get; set; }
        public int Age { get; set; }
    }

    public class Name

    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

    public class StoreDto

    {
        public NameDto Name { get; set; }
        public int Age { get; set; }
    }

    public class NameDto

    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string AllName { get; set; }
    }

    public class FlattenName

    {
        public string NameFirstname { get; set; }
        public string NameLastName { get; set; }
    }

    public class NameConverter : TypeConverter<Name, NameDto>

    {
        protected override NameDto ConvertCore(Name source)
        {
            return new NameDto() { AllName = source.FirstName + source.LastName };
        }
    }

    public class NameResolver : ValueResolver<Name, NameDto>

    {
        protected override NameDto ResolveCore(Name source)
        {
            return new NameDto() { FirstName = source.FirstName, LastName = source.LastName };
        }
    }

    public class NameFormatter : ValueFormatter<NameDto>

    {
        protected override string FormatValueCore(NameDto name)
        {
            return name.FirstName + name.LastName;
        }
    }

    public class StringFormatter : ValueFormatter<string>

    {
        protected override string FormatValueCore(string name)
        {
            return name + "-";
        }
    }
}

 

转载于:https://www.cnblogs.com/zcm123/p/4585096.html

你可能感兴趣的文章
MMU的作用
查看>>
决心书
查看>>
计算机网络(2)
查看>>
windows下使用ofstream默认输出内存数据到文件中时,会自动将0A换成0A0D
查看>>
Nginx unit 源码安装初体验
查看>>
PTA基础编程题目集6-2多项式求值(函数题)
查看>>
哈佛医生帮你增强记忆力
查看>>
Cloudera Search配置
查看>>
[原译]类型安全的黑板模式(属性包)
查看>>
【转】python中的一维卷积conv1d和二维卷积conv2d
查看>>
写可测试的代码
查看>>
XML学习(C#创建XML)[转自他人文章,仅做学习之用]
查看>>
[LeetCode] Two Sum II - Input array is sorted
查看>>
js数组去重三种方法
查看>>
洛谷4147:玉蟾宫——题解
查看>>
tomcat 调优
查看>>
快速部署Python应用:Nginx+uWSGI配置详解
查看>>
js操纵css样式
查看>>
[转] 理解CheckPoint及其在Tensorflow & Keras & Pytorch中的使用
查看>>
第一次作业-准备篇
查看>>