json 反序列化 父子类型_Json的序列化和反序列化
一.什么是Json:
中午肚子餓了,到餐廳點(diǎn)餐。向服務(wù)員點(diǎn)了幾個(gè)菜,廚師根據(jù)用戶的需求,開始烹飪食物,食物烹飪好后,怎么將食物呈現(xiàn)給用戶呢?這時(shí)就需要用到盛放食物的碗了。用戶拿到盛放食物的碗,就可以獲得點(diǎn)的餐了。這個(gè)碗就充當(dāng)了數(shù)據(jù)交換的容器了(^-^)
客戶端向服務(wù)器端發(fā)送請(qǐng)求后,服務(wù)器端怎么才能把用戶需要的數(shù)據(jù)返回給客戶端呢。這時(shí)我們就需要用一個(gè)指定的格式將數(shù)據(jù),按照指定格式返回客戶端。這時(shí)就有了兩種數(shù)據(jù)傳輸?shù)姆绞?XML和Json):
在普通的Web應(yīng)用中,不管是服務(wù)器端還是客戶端解析XML代碼會(huì)非常麻煩,所以這時(shí)Json就更加滿足數(shù)據(jù)傳輸解析的要求。采用Json格式的方式進(jìn)行數(shù)據(jù)的傳輸,不僅方便傳輸解析,還特別易于人閱讀和編寫
二.XML與Json轉(zhuǎn)換:
1.常規(guī)轉(zhuǎn)換:
fxhl
深圳
23
轉(zhuǎn)換為Json為:
{“name”:“fxhl”,"city":"深圳","age":23}
三.Json的表現(xiàn)形式:
1.對(duì)象:
{"returnCode": "R0000","returnMsg": "成功","lessTimes": "2","domainLink": "","seqNum": "1","identification": "595279","isNeedImageCode": "false"}
2.數(shù)組:
{"employees": [
{"firstName":"John" , "lastName":"Doe"},
{"firstName":"Anna" , "lastName":"Smith"},
{"firstName":"Peter" , "lastName":"Jones"}
]
}
3.數(shù)組對(duì)象混合:
這是截取的一小部分,對(duì)于比較復(fù)雜的Json格式的字符串,可以在線驗(yàn)證json。格式化一個(gè)格式。方便觀看
Json的表現(xiàn)形式一般就三種(對(duì)象,數(shù)組,字符串),使用過程中,只是將對(duì)象與數(shù)組進(jìn)行混合了
{"icon": [
{"title": "尚天貓,就購(gòu)了","icon_category": "baobei","icon_key": "icon-service-tianmao","trace": "srpservice","innerText": "天貓寶貝","url": "//www.tmall.com/"},
{"title": "保險(xiǎn)理賠","position": "99","innerText": "分組-保險(xiǎn)理賠","iconPopupComplex":
{"popup_title": "保險(xiǎn)理賠","subIcons": [
{"dom_class": "icon-service-yunfeixian","icon_content": "賣家贈(zèng)送退貨運(yùn)費(fèi)險(xiǎn)"}
]
}
}
]
}
四.Json序列化和反序列化的三種方式
1.使用JavaScriptSerializer類:
//使用JavaScriptSerializer方式需要引入的命名空間,這個(gè)在程序集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實(shí)體中的契約?[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格式數(shù)據(jù)寫入流中
12 js.WriteObject(msObj, p1);13 //從0這個(gè)位置開始讀取流中的數(shù)據(jù)
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 }
總結(jié):最后還是盡量使用JSON.NET來序列化和反序列化,性能好。
總結(jié)
以上是生活随笔為你收集整理的json 反序列化 父子类型_Json的序列化和反序列化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5个球放入3个箱子_乌龙!3个可疑箱子出
- 下一篇: 编辑器的合并用不了_Excel多工作簿合