生活随笔
收集整理的這篇文章主要介紹了
Newtonsoft.Json.dll 反序列化JSON字符串
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?上一篇JSON博客《JSON入門級學習小結--JSON數據結構》中已對JSON做了簡單介紹,JSON字符串數組數據樣式大概是這樣子的:
?
? ??
? ??
? ? 如今因為項目需求(asp.net web網站,前臺向后臺傳遞JSON數據,并對JSON數據處理,詳述見博客《?
《項目經驗》--通過js獲取前臺數據向一般處理程序傳遞Json數據,并解析Json數據,將前臺傳來的Json數據寫入數據庫表中
?》),需要對傳遞的JSON數據反序列化。于是從網上找了許多JSON反序列化的例子,最終決定使用Newtonsoft.Json.dll 反序列化JSON字符串,當然它也可以序列化JSON字符串,Newtonsoft.Json.dll下載鏈接!
?
? ??
? ??使用Newtonsoft.Json.dll反序列化JSON字符串的步驟:
? ??1.對Newtonsoft.Json.dll添加引用
? ? ?將Newtonsoft.Json.dll文件拷貝至界面層的Bin目錄下,然后右擊Bin,彈出“添加引用”頁,然后點擊“瀏覽”,然后找到界面層的Bin文件夾,找到Newtonsoft.Json.dll文件,然后點擊"添加",引用添加成功!
? ? ?
? ??
? ? 2.在需要對JSON字符串處理的界面,引用JSON空間,并對JSON進行處理
? ? ? 網上解決辦法大致如下:
? ? ?方法1:
[csharp]?view plaincopy print?
<span?style="font-family:KaiTi_GB2312;font-size:18px;">using?Newtonsoft.Json;??????using?System.Text;????????StringBuilder?sb?=?new?StringBuilder();??string?str?=?"[{ID:'1',Name:'John',Other:[{Age:'21',Sex:'0'}]},{ID:'2',Name:'Good',Other:[{Age:'36',Sex:'1'}]}]";??JavaScriptArray?javascript?=?(JavaScriptArray)JavaScriptConvert.DeserializeObject(str);??for?(int?i?=?0;?i?<?javascript.Count;?i++)??{??????????JavaScriptObject?obj?=?(JavaScriptObject)javascript[i];??????????sb.Append("ID:"?+?obj["ID"].ToString());??????sb.Append("Name:"?+?obj["Name"].ToString());??????????JavaScriptArray?json?=?(JavaScriptArray)obj["Other"];????????????????????????for?(int?j?=?0;?j?<?json.Count;?j++)??????{??????????JavaScriptObject?jsonobj?=?(JavaScriptObject)json[j];??????????sb.Append("Age:"?+?jsonobj["Age"].ToString());??????????sb.Append("Sex:"?+?jsonobj["Sex"].ToString());??????}??}??????</span>??
還有一種方法是:
?
?
[csharp]?view plaincopy print?
string?jsonText?=?"[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";?????JsonReader?reader?=?new?JsonReader(new?StringReader(jsonText));??????????while?(reader.Read())????????{????????????textBox1.Text?+=?"TokenType?=?"?+?reader.TokenType?+?"???ValueType?=??"?+?reader.ValueType?+?"???Value?=?"?+?reader.Value?+?"\r\n";????????????}???? ?
?
? ? ? ? ?第一種方法編譯直接出錯,根本不識別JavaScriptArray,JavaScriptObject,就連JavaScriptConvert方法也木有!那好吧,第二種總行了吧,提示:
?????錯誤?2?無法創建抽象類或接口“Newtonsoft.Json.JsonReader”的實例
?????? 這是怎么回事???
? ? ? ?后來在搜到的文章中,發現新版中JavaScriptArray變成了JArray,順著這個思路,發現變化如下:
? ? ??
[csharp]?view plaincopy print?
<span?style="font-family:KaiTi_GB2312;font-size:18px;">JavaScriptArray--->JArray????JavaScriptConvert--->JsonConvert????JavaScriptObject--->JObject</span>?? ? ?其實這樣更改更規范吧!
?
下面介紹新版本Newtonsoft.Json.dll反序列化JSON字符串的方法
??? 1.直接反序列化JSON字符串
? ? ??
[csharp]?view plaincopy print?
using?Newtonsoft.Json;????using?Newtonsoft.Json.Linq;???????string?jsonText?=?"[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";????JArray?ja?=(JArray)?JsonConvert.DeserializeObject(jsonText);????JObject?o?=?(JObject)ja[1];????Console.WriteLine(o["a"]);????Console.WriteLine(ja[1]["a"]);???? ?
?
? ??2.定義對象列表,然后反序列化JSON字符串
?
? ? ? 2.1 添加一個類,定義一個對象
? ??
[csharp]?view plaincopy print?
using?System;??using?System.Collections.Generic;??using?System.Linq;??using?System.Web;????public?class?Customer??{??????????public?string?a??????{?get;?set;?}??????????public?string?b??????{?get;?set;?}??????????public?string?c??????{?get;?set;?}??????public?string?Other??????{?get;?set;?}??????public?Customer()??????{??????????????????????????????????a?=?"";??????????b?=?"";??????????c?=?"";??????????Other?=?null;??????}??}?? ?
?
? ? ?2.2 反序列化JSON字符串
? ?
[csharp]?view plaincopy print?
using?Newtonsoft.Json;????using?Newtonsoft.Json.Linq;???string?jsonText?=?"[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";????List<Customer>?_list?=?JsonConvert.DeserializeObject<List<Customer>>(jsonText);????Console.WriteLine(_list[1].a);????foreach?(Customer?c?in?_list)????{????????Console.WriteLine(c.c);????}???
? ? 我感覺這兩種反序列化JSON的方法都挺好,其實還用很多方式可以反序列化JSON,本文僅僅借助了Newtonsoft.Json.dll這個工具!?
轉載于:https://www.cnblogs.com/zxtceq/p/7520727.html
總結
以上是生活随笔為你收集整理的Newtonsoft.Json.dll 反序列化JSON字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。