.net 對於接收到的json數組的轉換 C#解析JSON數組

https://www.cnblogs.com/chenyanbin/p/11200415.html

 

https://www.cnblogs.com/zoujinhua/p/10330066.html

C#解析JSON數組

 

方式一#

第一步:使用前,需下載: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;
         }
     }
 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章