EmitMapper系列之二:EmitMapper的使用小結 EmitMapper的入門

EmitMapper的入門

EmitMapper引用

 

EmitMapper案例

 

最近公司開發項目前端使用一個js框架,後端使用ef,js前臺讀取的json採用實體的dto來進行生成。html

在網上看到了EmitMapper相對其餘映射框架處理速度能夠更快,就拿來用了。下面是代碼中經常使用的幾個塊。前端

1.普通的映射。json

複製代碼
    public class UserInfo
    {
        public int id { get; set; }
        public string name { get; set; }
        public string address { get; set; }
    }

    public class UserInfoDTO
    {        
        public string name { get; set; }
        public string address { get; set; }
    }

    var mapper = ObjectMapperManager.DefaultInstance.GetMapper<UserInfo, UserInfoDTO>();
    UserInfoDTO userdto = mapper.Map(user);
複製代碼

2.有外鍵關聯,須要映射出外鍵所帶名字後端

複製代碼
    public class UserInfo
    {
        public int id { get; set; }
        public string name { get; set; }
        public string address { get; set; }

        public Teacher teacher { get; set; }
    }
    public class Teacher
    {
        public int id { get; set; }
        public string name { get; set; }
    }
    public class UserInfoDTO
    {
        public int id { get; set; }
        public string name { get; set; }
        public string teacher { get; set; }
    }

    var user = new UserInfo { 
                id = 12, 
                name = "張三", 
                address = "北京",
                teacher = new Teacher { 
                    id = 11, 
                    name = "王五" 
                }
            };

     var mapper = ObjectMapperManager.DefaultInstance.GetMapper<UserInfo, UserInfoDTO>(
                new DefaultMapConfig()
                .ConvertUsing<Teacher, string>(t => t.name)
                );
     UserInfoDTO userdto = mapper.Map(user);
複製代碼

3.兩個實體之間名字不一致,須要映射。app

複製代碼
    public class UserInfo
    {
        public int id { get; set; }
        public string name { get; set; }
        public string address { get; set; }
    }
    public class UserInfoDTO
    {
        public int id { get; set; }
        public string name { get; set; }
        public string userAddress { get; set; }
    }
    var mapper = ObjectMapperManager.DefaultInstance.GetMapper<UserInfo, UserInfoDTO>(
                new DefaultMapConfig()
                .MatchMembers((x, y) =>
                {
                    if (x == "address" && y == "userAddress")
                    {
                        return true;
                    }
                    return x == y;
                })
                );
    UserInfoDTO userdto = mapper.Map(user);
複製代碼

4.須要對某一個字段進行特殊處理框架

複製代碼
    public class UserInfo
    {
        public int id { get; set; }
        public string name { get; set; }
        public string address { get; set; }
    }
    public class UserInfoDTO
    {
        public string id { get; set; }
        public string name { get; set; }
        public string userAddress { get; set; }
        public string userJson { get; set; }
    }
    var user = new UserInfo { 
                id = 12, 
                name = "張三", 
                address = "北京"
            };

    var mapper = ObjectMapperManager.DefaultInstance.GetMapper<UserInfo, UserInfoDTO>(
                new DefaultMapConfig()
                .PostProcess<UserInfoDTO>((value, state) =>
                {
                    //在id編號前加上今年的年份
                    value.id = DateTime.Now.ToString("yyyy") + value.id;
                    //實體的json格式
                    value.userJson = "{\"id\":\"" + value.id + "\",\"name\":\"" + value.name + "\"}";
                    return value;
                })
            );
     UserInfoDTO userdto = mapper.Map(user);
複製代碼

5.忽略掉某個字段的映射post

複製代碼
    public class UserInfo
    {
        public int id { get; set; }
        public string name { get; set; }
        public string address { get; set; }
    }
    public class UserInfoDTO
    {
        public string id { get; set; }
        public string name { get; set; }
        public string address { get; set; }
    }
    var user = new UserInfo { 
                id = 12, 
                name = "張三", 
                address = "北京"
            };

    var mapper = ObjectMapperManager.DefaultInstance.GetMapper<UserInfo, UserInfoDTO>(
                new DefaultMapConfig()
                .IgnoreMembers<UserInfo, UserInfoDTO>(new string[] { "name" })
            );
    UserInfoDTO userdto = mapper.Map(user);
複製代碼

6.給空元素賦默認值url

複製代碼
    public class UserInfo
    {
        public int id { get; set; }
        public string name { get; set; }
        public string address { get; set; }
        public DateTime? godate { get; set; }
    }
    public class UserInfoDTO
    {
        public string id { get; set; }
        public string name { get; set; }
        public string address { get; set; }
        public DateTime godate { get; set; }
    }
    var user = new UserInfo { 
                id = 12, 
                name = "張三", 
                address = null,
                godate = null
            };

    var mapper = ObjectMapperManager.DefaultInstance.GetMapper<UserInfo, UserInfoDTO>(
                new DefaultMapConfig()
                //若是日期爲空設置爲當前時間
                .NullSubstitution<DateTime?, DateTime>((value) => DateTime.Now)
                //若是string類型爲null賦值爲「」
                .NullSubstitution<string, string>((value) => "")
            );
    UserInfoDTO userdto = mapper.Map(user);
複製代碼

經常使用的就上面幾點,對於更深刻的。有待之後研究。。。。。spa

本篇文章引用:園友(Arik lee) 的 http://www.cnblogs.com/ariklee/p/3833598.html,總結相對比較全code

相關文章
相關標籤/搜索