json 反序列化 父子类型_Json的序列化和反序列化
一.什么是Json:
中午肚子餓了,到餐廳點餐。向服務員點了幾個菜,廚師根據用戶的需求,開始烹飪食物,食物烹飪好后,怎么將食物呈現給用戶呢?這時就需要用到盛放食物的碗了。用戶拿到盛放食物的碗,就可以獲得點的餐了。這個碗就充當了數據交換的容器了(^-^)
客戶端向服務器端發送請求后,服務器端怎么才能把用戶需要的數據返回給客戶端呢。這時我們就需要用一個指定的格式將數據,按照指定格式返回客戶端。這時就有了兩種數據傳輸的方式(XML和Json):
在普通的Web應用中,不管是服務器端還是客戶端解析XML代碼會非常麻煩,所以這時Json就更加滿足數據傳輸解析的要求。采用Json格式的方式進行數據的傳輸,不僅方便傳輸解析,還特別易于人閱讀和編寫
二.XML與Json轉換:
1.常規轉換:
fxhl
深圳
23
轉換為Json為:
{“name”:“fxhl”,"city":"深圳","age":23}
三.Json的表現形式:
1.對象:
{"returnCode": "R0000","returnMsg": "成功","lessTimes": "2","domainLink": "","seqNum": "1","identification": "595279","isNeedImageCode": "false"}
2.數組:
{"employees": [
{"firstName":"John" , "lastName":"Doe"},
{"firstName":"Anna" , "lastName":"Smith"},
{"firstName":"Peter" , "lastName":"Jones"}
]
}
3.數組對象混合:
這是截取的一小部分,對于比較復雜的Json格式的字符串,可以在線驗證json。格式化一個格式。方便觀看
Json的表現形式一般就三種(對象,數組,字符串),使用過程中,只是將對象與數組進行混合了
{"icon": [
{"title": "尚天貓,就購了","icon_category": "baobei","icon_key": "icon-service-tianmao","trace": "srpservice","innerText": "天貓寶貝","url": "//www.tmall.com/"},
{"title": "保險理賠","position": "99","innerText": "分組-保險理賠","iconPopupComplex":
{"popup_title": "保險理賠","subIcons": [
{"dom_class": "icon-service-yunfeixian","icon_content": "賣家贈送退貨運費險"}
]
}
}
]
}
四.Json序列化和反序列化的三種方式
1.使用JavaScriptSerializer類:
//使用JavaScriptSerializer方式需要引入的命名空間,這個在程序集System.Web.Extensions.dll.中
using System.Web.Script.Serialization;
1 classProgram2 {3 static void Main(string[] args)4 {5 //序列化操作
6 JavaScriptSerializer jss = newJavaScriptSerializer();7 var json = new { name = "fxhl", age = 23};8 string str =jss.Serialize(json);9 //反序列化操作
10 Person person = jss.Deserialize(str);11 Console.WriteLine(person.name);12 }13 }14 [Serializable]15 public classPerson16 {17 public string name { get; set; }18 public int age { get; set; }19 }
2.使用DataContractJsonSerializer類:
//Person實體中的契約?[DataMember],[DataContract],是使用DataContractJsonSerializer序列化和反序列化必須要加的
//使用DataContractJsonSerializer方式需要引入的命名空間,在System.Runtime.Serialization.dll.中
using System.Runtime.Serialization.Json;
1 static void Main(string[] args)2 {3 //序列化操作
4 Person p1 = newPerson()5 {6 name = "fxhl",7 age = 23
8 };9 DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(Person));10 MemoryStream msObj = newMemoryStream();11 //將序列化之后的Json格式數據寫入流中
12 js.WriteObject(msObj, p1);13 //從0這個位置開始讀取流中的數據
14 msObj.Position = 0;15 StreamReader sr = newStreamReader(msObj, Encoding.UTF8);16 string json =sr.ReadToEnd();17 Console.WriteLine(json);18 sr.Close();19 msObj.Close();20 //反序列化操作
21 using (var ms = newMemoryStream(Encoding.Unicode.GetBytes(json)))22 {23 DataContractJsonSerializer deseralizer = new DataContractJsonSerializer(typeof(Person));24 Person model = (Person)deseralizer.ReadObject(ms);// //反序列化ReadObject
25 Console.WriteLine(model.name);26 }27 Console.ReadKey();28 }29 }30 [DataContract]31 public classPerson32 {33 [DataMember]34 public string name { get; set; }35 [DataMember]36 public int age { get; set; }37 }
3.使用JSON.NET類庫:
引入類庫:
//使用Json.NET類庫需要引入的命名空間
1 classProgram2 {3 static void Main(string[] args)4 {5 //序列化操作
6 var json = new { user = new { name = "fxhl", age = 23}};7 string jsonData =JsonConvert.SerializeObject(json);8 Console.WriteLine(jsonData);9 //反序列化操作方法一
10 Person p1= JsonConvert.DeserializeObject(jsonData);11 Console.WriteLine(p1.user.name);12 //反序列化操作方法二
13 string json2 = "[{\"user\":{\"name\":\"fxhl\",\"age\":23}}]";14 List listp2= JsonConvert.DeserializeObject>(json2);15 Console.WriteLine(listp2[0].user.name);16 Console.ReadKey();17 }18 }19 public classPerson20 {21 public Person user { get; set; }22 public string name { get; set; }23 public int age { get; set; }24 }
總結:最后還是盡量使用JSON.NET來序列化和反序列化,性能好。
總結
以上是生活随笔為你收集整理的json 反序列化 父子类型_Json的序列化和反序列化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5个球放入3个箱子_乌龙!3个可疑箱子出
- 下一篇: 编辑器的合并用不了_Excel多工作簿合