Json.NET(Newtonsoft.Json)是.Net 框架下比較流行的一款高效json序列化開源組件,支持.Net Framework 2.0 到 4.5+,並且可用於.Net各種環境Asp.net,Silverlight,Windows Phone,Windows 8等等.更多特性移步開源首頁:http://json.codeplex.com/
性能
Json.NET 、DataContractJsonSerializer、JavascriptSeriallizer性能測試結果對比,還不錯吧。
引用
方式1.下載解壓引用Newtonsoft.Json.dll
下載地址http://json.codeplex.com/releases/view/105633
方式2:Nuget安裝
PM> Install-Package Newtonsoft.Json
序列化與反序列
1.基本用法,首先引用Newtonsoft.Json命名空間,定義好與json同結構的的類用於轉換
Software software = new Software{ SoftID=1, SoftName="限時免費" , DownloadUrl="http://itunes.apple.com/cn/app/id427577372?mt=8", ReleaseTime=DateTime.Now }; //序列化 string jsonStr = JsonConvert.SerializeObject(software); //反序列化 Software objSoftware =JsonConvert.DeserializeObject<Software>(jsonStr); Console.WriteLine(jsonStr);
序列化輸出
2.時間格式處理,DateTime類型序列化默認序列化如上,這種格式在其它客戶端很難讀取,或者想按自己的格式化
Newtonsoft.Json.Converters.IsoDateTimeConverter timeConverter = new Newtonsoft.Json.Converters.IsoDateTimeConverter(); timeConverter.DateTimeFormat = "yyyy年MM月dd日 HH:mm:ss"; Console.WriteLine(JsonConvert.SerializeObject(software, timeConverter));
輸出結果:
3.匿名類型序列化,這種方法無需事先定義與json同結構的類就能反序列化
//Json字符串 string jsonStr = @"{result:-1,desc:'參數錯誤,請檢查格式'}"; //反序列化 var obj = JsonConvert.DeserializeAnonymousType(jsonStr, new { result = 0, desc = string.Empty }); Console.WriteLine(string.Format("result:{0} desc:{1}", obj.result, obj.desc));
4.快速定位節點,用於快速處理或者json結構較為復雜的字符串,又不想定義對應轉移類,如
{"weatherinfo":{"city":"福州","city_en":"fuzhou","date_y":"2013年5月4日","date":"","week":"星期六","fchh":"18","cityid":"101230101","temp1":"16℃~21℃","temp2":"16℃~23℃","temp3":"17℃~24℃","temp4":"16℃~26℃","temp5":"17℃~29℃","temp6":"18℃~28℃","tempF1":"60.8℉~69.8℉","tempF2":"60.8℉~73.4℉","tempF3":"62.6℉~75.2℉","tempF4":"60.8℉~78.8℉","tempF5":"62.6℉~84.2℉","tempF6":"64.4℉~82.4℉","weather1":"陣雨","weather2":"陣雨轉陰","weather3":"陰轉雷陣雨","weather4":"陣雨轉雷陣雨","weather5":"陣雨轉多雲","weather6":"多雲轉中雨","img1":"3","img2":"99","img3":"3","img4":"2","img5":"2","img6":"4","img7":"3","img8":"4","img9":"3","img10":"1","img11":"1","img12":"8","img_single":"3","img_title1":"陣雨","img_title2":"陣雨","img_title3":"陣雨","img_title4":"陰","img_title5":"陰","img_title6":"雷陣雨","img_title7":"陣雨","img_title8":"雷陣雨","img_title9":"陣雨","img_title10":"多雲","img_title11":"多雲","img_title12":"中雨","img_title_single":"陣雨","wind1":"微風","wind2":"微風","wind3":"微風","wind4":"微風","wind5":"微風","wind6":"微風","fx1":"微風","fx2":"微風","fl1":"小於3級","fl2":"小於3級","fl3":"小於3級","fl4":"小於3級","fl5":"小於3級","fl6":"小於3級","index":"舒適","index_d":"建議着薄型套裝或牛仔衫褲等春秋過渡裝。年老體弱者宜着套裝、夾克衫等。","index48":"舒適","index48_d":"建議着薄型套裝或牛仔衫褲等春秋過渡裝。年老體弱者宜着套裝、夾克衫等。","index_uv":"弱","index48_uv":"最弱","index_xc":"不宜","index_tr":"適宜","index_co":"舒適","st1":"19","st2":"14","st3":"25","st4":"14","st5":"23","st6":"16","index_cl":"較不宜","index_ls":"不太適宜","index_ag":"易發"}}
讀取weatherinfo下的weather1
var obj = JObject.Parse(html); string weather1 = (string)obj["weatherinfo"]["weather1"];
快速方便吧~~