ShowProgramCode

2021年4月23日 星期五

C#中DTO資料傳給另一個DTO

 最近換了工作,所以要開始寫ASP.NET了,C#和PHP的差異不小,因此寫起來有點...

遇到問題是一定的,決定開始慢慢建構自己的C#筆記。

不過對於C#而言,我還是個新手,如果有什麼錯誤還請多多包容。

今天遇到的問題就是要把一個資料物件轉到另一個相似的資料物件裡,這個物件除了get()和set()外,幾乎沒有任何其他函式,PHP的話很簡單,不過遇到嚴謹的C#就糟糕了。

查了諸多資料,終於嘗試出一個解法,把程式碼和測試碼放在下面。

參考網頁:https://dotblogs.com.tw/JustTree/2019/01/04/140125

程式碼:

public static class DtoDataToDto

{

     /// <summary>容器物件轉換</summary>

     /// <typeparam name="T1">輸入物件格式</typeparam>

    /// <typeparam name="T2">輸出物件格式</typeparam>

    /// <param name="Data1">輸入物件資訊</param>

    /// <returns>T2</returns>

    public static T2 ObjectDataChange<T1, T2>(T1 Data1)

    {

        string strjsonData = JsonConvert.SerializeObject(Data1);

        var returnData = JsonConvert.DeserializeObject<T2>(strjsonData);

        return returnData;

    }

}


測試碼:

    class TestDemo1

    {

        public int item1 = 1;

        public string item2 = "2";

        private int item3 = 3;

        private string item4 = "4";

        public int item5 { get { return item3; } }

        public string item6 { get { return item4; } }

    }


    class TestDemo2

    {

        public int item1;

        public string item2;

        private int item3;

        private string item4;

        public int item5 { get { return item3; } }

        public string item6 { get { return item4; } }

    }


    [TestClass]

    public class DtoDataToDtoTest

    {

        [TestMethod]

        public void ObjectChangeDataTest()

        {

            TestDemo1 testDemo1 = new TestDemo1();

            TestDemo2 testDemo2 = DtoDataToDto.ObjectDataChange<TestDemo1, TestDemo2>(testDemo1);

            Assert.AreEqual(testDemo1.item1 , testDemo2.item1);

            Assert.AreEqual(testDemo1.item2, testDemo2.item2);

            Assert.AreNotEqual(testDemo1.item5, testDemo2.item5);

            Assert.AreNotEqual(testDemo1.item6, testDemo2.item6);

            Assert.AreEqual(testDemo2.item5 , 0);

            Assert.IsNull(testDemo2.item6);

        }

    }