日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Newtonsoft.Json.dll 反序列化JSON字符串

發布時間:2024/1/17 javascript 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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;">//引用JSON解析使用的空間??
  • using?Newtonsoft.Json;??????
  • using?System.Text;????
  • ????
  • //定義一個可變字符串數組??
  • StringBuilder?sb?=?new?StringBuilder();??
  • //定義一個JSON字符串str??
  • string?str?=?"[{ID:'1',Name:'John',Other:[{Age:'21',Sex:'0'}]},{ID:'2',Name:'Good',Other:[{Age:'36',Sex:'1'}]}]";??
  • //反序列化JSON數據??
  • JavaScriptArray?javascript?=?(JavaScriptArray)JavaScriptConvert.DeserializeObject(str);??
  • //依次讀取反序列化的JSON數據,并將各數據寫入可變字符串數組中??
  • 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());??
  • ????//反序列化JSON數據??
  • ????JavaScriptArray?json?=?(JavaScriptArray)obj["Other"];??
  • ??????????????
  • ????//依次讀取反序列化的JSON數據,并將各數據寫入可變字符串數組中??
  • ????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?
  • //定義一個JSON字符串str????
  • string?jsonText?=?"[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";????
  • ?//反序列化JSON數據??
  • JsonReader?reader?=?new?JsonReader(new?StringReader(jsonText));????
  • ??//依次讀取反序列化的JSON數據??
  • ????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?
  • //引用序列化、反序列化JSON字符串用到的空間??
  • using?Newtonsoft.Json;????
  • using?Newtonsoft.Json.Linq;???
  • ???
  • ?//定義一個JSON字符串???
  • string?jsonText?=?"[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";????
  • //反序列化JSON字符串??
  • JArray?ja?=(JArray)?JsonConvert.DeserializeObject(jsonText);???
  • ?//將反序列化的JSON字符串轉換成對象??
  • 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;??
  • ??
  • ///?<summary>????
  • ///Customer?的摘要說明????
  • ///?</summary>????
  • public?class?Customer??
  • {??
  • ????//在序列化前后沒有變動????
  • ????public?string?a??
  • ????{?get;?set;?}??
  • ????//在序列化前后設置和重置????
  • ????public?string?b??
  • ????{?get;?set;?}??
  • ????//設置為null,但在序列化后填充????
  • ????public?string?c??
  • ????{?get;?set;?}??
  • ????public?string?Other??
  • ????{?get;?set;?}??
  • ????public?Customer()??
  • ????{??
  • ????????//????
  • ????????//TODO:?在此處添加構造函數邏輯????
  • ????????//????
  • ????????a?=?"";??
  • ????????b?=?"";??
  • ????????c?=?"";??
  • ????????Other?=?null;??
  • ????}??
  • }??
  • ?

    ?

    ? ? ?2.2 反序列化JSON字符串

    ? ?

    [csharp]?view plaincopy print?
  • //引用序列化、反序列化JSON字符串用到的空間??
  • using?Newtonsoft.Json;????
  • using?Newtonsoft.Json.Linq;???
  • //定義一個JSON字符串???
  • string?jsonText?=?"[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";????
  • //反序列化JSON字符串,將JSON字符串轉換成LIST列表??
  • 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字符串的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。