Newtonsoft.Json(Json.Net)学习笔记
Newtonsoft.Json 在Vs2013中就有自帶的:
?下面是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字符串生成對象實(shí)體/// </summary>/// <typeparam name="T">對象類型</typeparam>/// <param name="json">json字符串(eg.{"ID":"112","Name":"石子兒"})</param>/// <returns>對象實(shí)體</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數(shù)組生成對象實(shí)體集合/// </summary>/// <typeparam name="T">對象類型</typeparam>/// <param name="json">json數(shù)組字符串(eg.[{"ID":"112","Name":"石子兒"}])</param>/// <returns>對象實(shí)體集合</returns>public static List<T> DeserializeJsonToList<T>(string json) where T : class{JsonSerializer serializer = new JsonSerializer();StringReader sr = new StringReader(json);object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List<T>));List<T> list = o as List<T>;return list;}/// <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;}}?為進(jìn)一步理解Newtonsoft,寫了一些測試的例子:
/// <summary>/// Json測試/// </summary>public class JsonTest : IRun{public void Run(){Student sdudent = new Student();sdudent.ID = 1;sdudent.Name = "陳晨";sdudent.NickName = "石子兒";sdudent.Class = new Class() { Name = "CS0216", ID = 0216 };//實(shí)體序列化和反序列化string json1 = JsonHelper.SerializeObject(sdudent);//json1 : {"ID":1,"Name":"陳晨","NickName":"石子兒","Class":{"ID":216,"Name":"CS0216"}}Student sdudent1 = JsonHelper.DeserializeJsonToObject<Student>(json1);//實(shí)體集合序列化和反序列化List<Student> sdudentList = new List<Student>() { sdudent, sdudent1 };string json2 = JsonHelper.SerializeObject(sdudentList);//json: [{"ID":1,"Name":"陳晨","NickName":"石子兒","Class":{"ID":216,"Name":"CS0216"}},{"ID":1,"Name":"陳晨","NickName":"石子兒","Class":{"ID":216,"Name":"CS0216"}}]List<Student> sdudentList2 = JsonHelper.DeserializeJsonToList<Student>(json2);//DataTable序列化和反序列化DataTable dt = new DataTable();dt.TableName = "Student";dt.Columns.Add("ID", typeof(int));dt.Columns.Add("Name");dt.Columns.Add("NickName");DataRow dr = dt.NewRow();dr["ID"] = 112;dr["Name"] = "戰(zhàn)三";dr["NickName"] = "小三";dt.Rows.Add(dr);string json3 = JsonHelper.SerializeObject(dt);//json3 : [{"ID":112,"Name":"戰(zhàn)三","NickName":"小三"}]DataTable sdudentDt3 = JsonHelper.DeserializeJsonToObject<DataTable>(json3);List<Student> sdudentList3 = JsonHelper.DeserializeJsonToList<Student>(json3);//驗(yàn)證對象和數(shù)組Student sdudent4 = JsonHelper.DeserializeJsonToObject<Student>("{\"ID\":\"112\",\"Name\":\"石子兒\"}");List<Student> sdudentList4 = JsonHelper.DeserializeJsonToList<Student>("[{\"ID\":\"112\",\"Name\":\"石子兒\"}]");//匿名對象解析var tempEntity = new { ID = 0, Name = string.Empty };string json5 = JsonHelper.SerializeObject(tempEntity);//json5 : {"ID":0,"Name":""}tempEntity = JsonHelper.DeserializeAnonymousType("{\"ID\":\"112\",\"Name\":\"石子兒\"}", tempEntity);var tempStudent = new Student();tempStudent = JsonHelper.DeserializeAnonymousType("{\"ID\":\"112\",\"Name\":\"石子兒\"}", tempStudent);Console.Read();}}/// <summary>/// 學(xué)生信息實(shí)體/// </summary>public class Student{public int ID { get; set; }public string Name { get; set; }public string NickName { get; set; }public Class Class { get; set; }}/// <summary>/// 學(xué)生班級實(shí)體/// </summary>public class Class{public int ID { get; set; }public string Name { get; set; }}使用Json幫助類時,有兩點(diǎn)需要注意下:
?????????1. 通常使用調(diào)用實(shí)體序列化SerializeObject()和反序列化DeserializeJsonToObject()兩個方法就可以了。但有些情況下我們解析json字符串時,可能沒有對應(yīng)的實(shí)體類型(或者說不想添加對應(yīng)的實(shí)體類),這時候可以用匿名對象解析方法DeserializeAnonymousType(),方便快捷,對應(yīng)代碼如下:
?
//匿名對象解析var tempEntity = new { ID = 0, Name = string.Empty };string json5 = JsonHelper.SerializeObject(tempEntity);//json5 : {"ID":0,"Name":""}tempEntity = JsonHelper.DeserializeAnonymousType("{\"ID\":\"112\",\"Name\":\"石子兒\"}", tempEntity);Console.WriteLine(tempEntity.ID + ":" + tempEntity.Name);?
?2. Json的兩種結(jié)構(gòu)數(shù)組和對象解析時略有不同。Json對象一般轉(zhuǎn)換成實(shí)體,Json數(shù)組一般轉(zhuǎn)換成實(shí)體集合。代碼如下:
//驗(yàn)證對象和數(shù)組Student sdudent4 = JsonHelper.DeserializeJsonToObject<Student>("{\"ID\":\"112\",\"Name\":\"石子兒\"}");List<Student> sdudentList4 = JsonHelper.DeserializeJsonToList<Student>("[{\"ID\":\"112\",\"Name\":\"石子兒\"}]");?簡單解釋下Json對象和數(shù)組的含義:
???????? 對象是以“{”(左括號)開始,“}”(右括號)結(jié)束。每個“名稱”后跟一個“:”(冒號);“‘名稱/值’ 對”之間運(yùn)用 “,”(逗號)分隔。名稱用引號括起來;值如果是字符串則必須用括號,數(shù)值型則不須要。例如:{"ID":"112","Name":"石子兒"}。
?
???????? 數(shù)組是值(value)的有序集合。一個數(shù)組以“[”(左中括號)開始,“]”(右中括號)結(jié)束。值之間運(yùn)用 “,”(逗號)分隔。例如:[{"ID":"112","Name":"石子兒"},{"ID":"113","Name":"陳晨"}]。
?
轉(zhuǎn)載于:https://www.cnblogs.com/xp1056/p/5510316.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Newtonsoft.Json(Json.Net)学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 下配置 phpredis 的
- 下一篇: Asp.Net MVC 教程