前言:在過去使用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);
}
測試結果顯示:
以上為我理解序列化/反序列化的筆記,如有任何錯誤的地方,再麻煩指教一下,感謝!