[C#]、[JSON] 實作JSON 序列化(Serialize)與反序列化(Deserialize)

前言:在過去使用JSON 輕量化資料交換格式,有接觸到需要將Json格式資料存入資料庫或是帶出資料庫,這過程中爬文讓我無意間接觸到了Json的序列化以及反序列化,之前的用到這相關的程式片段只要可以Work就行了,也沒有真正去了解它,因此今天就來記錄一下過去曾做過的Json序列化及反序列化。

 

物件序列化(Serialize)說明: 將物件轉換為資料流,在Json的應用上序列化感覺比較少見,因為資料大部分已經用字串組合而成,除非程式在類別裡的其他method需要用到Json資料,我們就無需再將資料編列一次Json格式,只要將之前已反序列化(也就是物件化)的Json資料進行序列化,即可取得Json格式資料。

物件反序列化(Deserialize)說明:將Json格式資料轉換為物件,在Json的應用上相對常見,因為我們需要把Json格式的資料轉換為程式可看得懂的物件,並取其資料進行程式上的處理。

程式片段說明:此段將編列好的JSON格式資料,反序列(物件化)成CS物件,因此在程式中若要調用存著JSON資料流的JsonObj_Deserialize()物件, 只要Call其屬性即可利用到Json中的參數,比如:JsonObj_Deserialize().ID等,帶出name為ID 的參數。

protected void Page_Load(object sender, EventArgs e)
        {
            //列印結果
            Response.Write(
                string.Format("ID : {0} ; Name :{1}", JsonObj_Deserialize().ID, JsonObj_Deserialize().Name)
                );//反序列 : 將JSON 格式的資料流轉換成CS類別物件
        }
        /// <summary>
        /// CS類別,物件示範
        /// </summary>
        public class CS
        {
            public string ID { get; set; }
            public string Name { get; set; }
        }

        public CS JsonObj_Deserialize()
        {
            //組建測試Json內容
            StringBuilder sb = new StringBuilder();
            sb.AppendLine(string.Format("{{"));
            sb.AppendLine(string.Format("\"ID\":\"{0}\"", "測試"));
            sb.AppendLine(string.Format(",\"Name\":\"{0}\"", "1234"));
            sb.AppendLine(string.Format("}}"));

            //反序列化
            CS _JsonObj_Deserialize = new JavaScriptSerializer().Deserialize<CS>(sb.ToString());
            return _JsonObj_Deserialize;
        }

 

測試結果顯示

程式片段說明: 此時要在別的method 再次呼叫出原本編列的JSON格式資料,只要將其物件序列化即可取得該JSON資料,例如我在PageLoad事件底下序列化JsonObj_Deserialize()物件,即可取得該JsonObj_Deserialize物件內的JSON格式資料。

  protected void Page_Load(object sender, EventArgs e)
        {
            //列印結果
            //Response.Write(
             //   string.Format("ID : {0} ; Name :{1}", JsonObj_Deserialize().ID, JsonObj_Deserialize().Name)
             //   );//反序列 : 將JSON 格式的資料流轉換成CS類別物件
            var SerializeParam = new JavaScriptSerializer().Serialize(JsonObj_Deserialize());//序列化 : 帶出JSON格式資料流
            //列印結果
            Response.Write(SerializeParam);
        }

測試結果顯示:

以上為我理解序列化/反序列化的筆記,如有任何錯誤的地方,再麻煩指教一下,感謝!

參考文章:https://lolikitty.pixnet.net/blog/post/36759934 

參考文章:https://dotblogs.com.tw/brooke/2017/10/27/112026