方式一
第一步:使用前,需下載:Newtonsoft.Json.dll
沒有的,請到我百度雲盤下載
鏈接:https://pan.baidu.com/s/1JBkee4qhtW7XOyYFiGOL2Q
提取碼:b5uq
第二步:引入命名空間:using Newtonsoft.Json;
第三步:封裝一個函數,方便以后使用
待解析JSON數組
函數:
public static Newtonsoft.Json.Linq.JArray GetToJsonList(string json) { Newtonsoft.Json.Linq.JArray jsonArr = (Newtonsoft.Json.Linq.JArray)JsonConvert.DeserializeObject(json); return jsonArr; }
實現:
搞定~
方式二(推薦):
第一步就是要根據這個JSON來寫出對應的實體類。用來存放數據。這個實體類如何寫的?其實非常簡單。因為一般不需要手動自己寫,當然,你要是喜歡也可以自己寫。不過我一般使用網站直接轉換。自己百度 查一下,JSON轉C#實體類,就會有很多網站給你轉。
我使用的是這個網站:http://www.bejson.com/convert/json2csharp/
{"message":"ok","nu":"367847964498","ischeck":"1","condition":"F00","com":"shunfeng","status":"200","state":"3","data":[{"time":"2017-09-21 09:33:09","ftime":"2017-09-21 09:33:09","context":"已簽收,感謝使用順豐,期待再次為您服務","location":""},{"time":"2017-09-21 09:09:48","ftime":"2017-09-21 09:09:48","context":"快件交給鞏向濤,正在派送途中(聯系電話:18806439871)","location":""},{"time":"2017-09-21 07:02:41","ftime":"2017-09-21 07:02:41","context":"快件到達 【淄博市桓台田庄速運營業點 】","location":""},{"time":"2017-09-20 15:32:00","ftime":"2017-09-20 15:32:00","context":"快件在【淄博市桓台縣工業街營業點】已裝車,准備發往下一站","location":""},{"time":"2017-09-20 13:37:08","ftime":"2017-09-20 13:37:08","context":"快件到達 【淄博市桓台縣工業街營業點】","location":""},{"time":"2017-09-20 10:47:07","ftime":"2017-09-20 10:47:07","context":"快件在【淄博高新集散中心】已裝車,准備發往下一站","location":""},{"time":"2017-09-20 10:15:47","ftime":"2017-09-20 10:15:47","context":"快件到達 【淄博高新集散中心】","location":""},{"time":"2017-09-19 23:20:18","ftime":"2017-09-19 23:20:18","context":"快件在【深圳總集散中心】已裝車,准備發往下一站","location":""},{"time":"2017-09-19 22:39:27","ftime":"2017-09-19 22:39:27","context":"快件到達 【深圳總集散中心】","location":""},{"time":"2017-09-19 18:57:33","ftime":"2017-09-19 18:57:33","context":"快件在【深圳龍華新區華聯社區營業部】已裝車,准備發往下一站","location":""},{"time":"2017-09-19 16:12:21","ftime":"2017-09-19 16:12:21","context":"順豐速運 已收取快件","location":""}]}
只需將JSON放到這個網站,自動給我們生成實體類即可
實體類:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace WindowsFormsApplication1 { /// <summary> /// JSON數據的實體類 /// </summary> public class Root { /// <summary> /// /// </summary> public string message { get; set; } /// <summary> /// /// </summary> public string nu { get; set; } /// <summary> /// /// </summary> public string ischeck { get; set; } /// <summary> /// /// </summary> public string condition { get; set; } /// <summary> /// /// </summary> public string com { get; set; } /// <summary> /// /// </summary> public string status { get; set; } /// <summary> /// /// </summary> public string state { get; set; } /// <summary> /// /// </summary> public List<DataItem> data { get; set; } } public class DataItem { /// <summary> /// /// </summary> public string time { get; set; } /// <summary> /// /// </summary> public string ftime { get; set; } /// <summary> /// 已簽收,感謝使用順豐,期待再次為您服務 /// </summary> public string context { get; set; } /// <summary> /// /// </summary> public string location { get; set; } } }
實體類創建好后,我們還需要一個DLL文件,Newtonsoft.Json.DLL,看方式一
封裝一個方法
/// <summary> /// 將JSON轉字符串(包括數組) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="json"></param> /// <returns></returns> public static T JsonConvertObject<T>(string json) { return JsonConvert.DeserializeObject<T>(json); }
調用即可
以下JSON幫助類
using System.Collections.Generic; using System.IO; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.Data; using System.Reflection; using System; namespace Sam.OA.Common { /// <summary> /// Json幫助類 /// 使用前需引用開源項目類庫:Newtonsoft.Json.dll /// </summary> public sealed class JsonHelper { /// <summary> /// 將對象序列化為json格式 /// </summary> /// <param name="obj">序列化對象</param> /// <returns>json字符串</returns> public static string SerializeObjct(object obj) { return JsonConvert.SerializeObject(obj); } /// <summary> /// 解析JSON字符串生成對象實體 /// </summary> /// <typeparam name="T">實體類</typeparam> /// <param name="json">JSON字符串</param> /// <returns></returns> public static T JsonConvertObject<T>(string json) { return JsonConvert.DeserializeObject<T>(json); } /// <summary> /// 解析JSON字符串生成對象實體 /// </summary> /// <typeparam name="T">對象類型</typeparam> /// <param name="json">json字符串</param> /// <returns></returns> public static T DeserializeJsonToObject<T>(string json) where T:class { JsonSerializer serializer = new JsonSerializer(); StringReader sr = new StringReader(json); object obj = serializer.Deserialize(new JsonTextReader(sr), typeof(T)); T t = obj as T; return t; } /// <summary> /// 解析JSON數組生成對象實體集合 /// </summary> /// <typeparam name="T">對象類型</typeparam> /// <param name="json">json數組</param> /// <returns>對象實體集合</returns> public static List<T> DeserializeJsonToList<T>(string json) where T : class { JsonSerializer serializer = new JsonSerializer(); StringReader sr = new StringReader(json); object obj = serializer.Deserialize(new JsonTextReader(sr), typeof(List<T>)); List<T> list = obj as List<T>; return list; } /// <summary> /// 將JSON轉數組 /// 用法:jsonArr[0]["xxxx"] /// </summary> /// <param name="json">json字符串</param> /// <returns></returns> public static JArray GetToJsonList(string json) { JArray jsonArr = (JArray)JsonConvert.DeserializeObject(json); return jsonArr; } /// <summary> /// 將DataTable轉換成實體類 /// </summary> /// <typeparam name="T">實體類</typeparam> /// <param name="dt">DataTable</param> /// <returns></returns> public static List<T> DtConvertToModel<T>(DataTable dt) where T : new() { List<T> ts = new List<T>(); foreach (DataRow dr in dt.Rows) { T t = new T(); foreach (PropertyInfo pi in t.GetType().GetProperties()) { if (dt.Columns.Contains(pi.Name)) { if (!pi.CanWrite) continue; var value = dr[pi.Name]; if (value != DBNull.Value) { switch (pi.PropertyType.FullName) { case "System.Decimal": pi.SetValue(t, decimal.Parse(value.ToString()), null); break; case "System.String": pi.SetValue(t, value.ToString(), null); break; case "System.Int32": pi.SetValue(t, int.Parse(value.ToString()), null); break; default: pi.SetValue(t, value, null); break; } } } } ts.Add(t); } return ts; } } }