對象序列化及反序列化
對象序列化是將編程中的對象轉換成json字符串,實現對象持久化,便於將對象信息存儲到硬盤,或進行網絡傳輸,方便不同編程語言之間進行遠程傳遞對象,序列化產生的對象信息為json的{鍵:值}格式
對象反序列化是從序列化的信息流轉提取信息,還原成對象信息
對象序列化使用——封裝序列化方法
//引用Newtonsoft.Json,一款.NET中開源的Json序列化和反序列化類庫 using Newtonsoft.Json; /// <summary>/// Json幫助類 /// </summary> public class JsonHelper { /// <summary> /// 將對象序列化為JSON格式 /// </summary> /// <param name="o">對象</param> /// <returns>json字符串</returns> public static string SerializeObject(object o) { string json = JsonConvert.SerializeObject(o); return json; } /// <summary> /// 解析JSON字符串生成對象實體 /// </summary> /// <typeparam name="T">對象類型</typeparam> /// <param name="json">json字符串(eg.{"ID":"112","Name":"json"})</param> /// <returns>對象實體</returns> public static T DeserializeJsonToObject<T>(string json) where T : class { JsonSerializer serializer = new JsonSerializer(); StringReader sr = new StringReader(json); object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T)); T t = o as T; return t; } /// <summary> /// 反序列化JSON到給定的匿名對象. /// </summary>/// <typeparam name="T">匿名對象類型</typeparam> /// <param name="json">json字符串</param> /// <param name="anonymousTypeObject">匿名對象</param> /// <returns>匿名對象</returns> public static T DeserializeAnonymousType<T>(string json, T anonymousTypeObject) { T t = JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject); return t; } }
對象序列化使用——序列化方法的使用
public class JsonTest { public void Run() { Student sdudent = new Student(); sdudent.ID = 1; sdudent.Name = "json"; sdudent.Class = new Class() { Name = "CS0216", ID = 0216 }; //實體序列化和反序列化 string json1 = JsonHelper.SerializeObject(sdudent); //json1 : {"ID":1,"Name":"json","Class":{"ID":216,"Name":"CS0216"}} Student sdudent1 = JsonHelper.DeserializeJsonToObject<Student>(json1); //匿名對象解析 var tempEntity = new { ID = 0, Name = string.Empty }; string json5 = JsonHelper.SerializeObject(tempEntity); //json5 : {"ID":0,"Name":""} tempEntity = JsonHelper.DeserializeAnonymousType("{\"ID\":\"112\",\"Name\":\"jsontest\"}", tempEntity); var tempStudent = new Student(); tempStudent = JsonHelper.DeserializeAnonymousType("{\"ID\":\"112\",\"Name\":\"jsontest\"}", tempStudent); Console.Read(); } } /// <summary> /// 學生信息實體 /// </summary> public class Student { public int ID { get; set; } public string Name { get; set; } public Class Class { get; set; } } /// <summary> /// 學生班級實體 /// </summary> public class Class { public int ID { get; set; } public string Name { get; set; } }