c# AutoMapper踩坑


AutoMapper中的before和ForMember和after的區別

我這里准備了一個測試用例,我們正常實體轉dto都是直接試用一些方法

CreateMap<TestEntity, TestDto>();

但是實際難免需要一些字段類型的改變,這里介紹before和ForMember還有after的區別

 

一、before的使用

before使用在實體轉化dto之前,用於改變實體的字段值,然后再賦值給dto;

 

 

 這里的id本來是1,但是通過before轉化賦值后,輸出到都dto就變成了3;

二、after的使用

after使用在實體轉化dto之后,用於改變輸出dto的值,在實體賦值之后,到這里類型如果沒問題的話,是不會報錯的,但是如果類型不對的話,就會報錯,

下面為大家演示一下

類型正確

 

 

 類型錯誤:Introduce字符串轉成數組對象

 

 

 

 這里的字符串轉成數組對象,就會報類型錯誤,這也是我遇到的坑,這個時候before和after都不能用

三、ForMember的使用

這里使用ForMember進行屬性條件轉換

 

 屬性轉換成功了

public void Test1()
        {
            List<Detail> details = new List<Detail>
            {
                new Detail
                {
                    Id=1,
                    Name=""
                },
                 new Detail
                {
                    Id=1,
                    Name=""
                },
                  new Detail
                {
                    Id=1,
                    Name="rap"
                },
                   new Detail
                {
                    Id=1,
                    Name="籃球"
                },
            };

            TestEntity test = new TestEntity
            {
                Id = 1,
                Name = "小明",
                Introduce = JsonConvert.SerializeObject(details)
            };
            var config = new MapperConfiguration(cfg =>
            {
                cfg.CreateMap<TestEntity, TestDto>();
                // 表示源類型命名規則
                cfg.SourceMemberNamingConvention = new PascalCaseNamingConvention();
                //表示目標類型命名規則
                cfg.DestinationMemberNamingConvention = new LowerUnderscoreNamingConvention();
                //LowerUnderscoreNamingConvention 和 PascalCaseNamingConvention 是 AutoMapper 提供的兩個命名規則。前者命名是小寫並包含下划線,后者就是帕斯卡命名規則(每個單詞的首字母大寫)。
            });
            var result = config.CreateMapper().Map<TestDto>(test);
        }
        public class TestEntity
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public string Introduce { get; set; }
        }
        public class TestDto
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public List<Detail> Introduce { get; set; }

        }
        public class Detail
        {
            public int Id { get; set; }
            public string Name { get; set; }
        }

 


免責聲明!

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



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