EmitMapper的使用小結


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

在網上看到了EmitMapper相對其他映射框架處理速度可以更快,就拿來用了。下面是代碼中常用的幾個塊。

1.普通的映射。

    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.兩個實體之間名字不一致,需要映射。

    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.忽略掉某個字段的映射

    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.給空元素賦默認值

    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);

常用的就上面幾點,對於更深入的。有待以后研究。。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM