C#解析JSON数组

C#解析JSON数组

方式一

第一步:使用前,需下载:Newtonsoft.Json.dll

没有的,请到我百度云盘下载

链接:https://pan.baidu.com/s/1JBkee4qhtW7XOyYFiGOL2Q 
提取码:b5uq

第二步:引入命名空间:using Newtonsoft.Json;

第三步:封装一个函数,方便以后使用

待解析JSON数组

函数:

1         public static Newtonsoft.Json.Linq.JArray GetToJsonList(string json)
2         {
3             Newtonsoft.Json.Linq.JArray jsonArr = (Newtonsoft.Json.Linq.JArray)JsonConvert.DeserializeObject(json);
4             return jsonArr;
5         }

实现:

搞定~

方式二(推荐):

  第一步就是要根据这个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放到这个网站,自动给我们生成实体类即可

实体类:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace WindowsFormsApplication1
 7 {
 8 
 9     /// <summary>
10     /// JSON数据的实体类
11     /// </summary>
12     public class Root
13     {
14         /// <summary>
15         /// 
16         /// </summary>
17         public string message { get; set; }
18         /// <summary>
19         /// 
20         /// </summary>
21         public string nu { get; set; }
22         /// <summary>
23         /// 
24         /// </summary>
25         public string ischeck { get; set; }
26         /// <summary>
27         /// 
28         /// </summary>
29         public string condition { get; set; }
30         /// <summary>
31         /// 
32         /// </summary>
33         public string com { get; set; }
34         /// <summary>
35         /// 
36         /// </summary>
37         public string status { get; set; }
38         /// <summary>
39         /// 
40         /// </summary>
41         public string state { get; set; }
42         /// <summary>
43         /// 
44         /// </summary>
45         public List<DataItem> data { get; set; }
46     }
47     public class DataItem
48     {
49         /// <summary>
50         /// 
51         /// </summary>
52         public string time { get; set; }
53         /// <summary>
54         /// 
55         /// </summary>
56         public string ftime { get; set; }
57         /// <summary>
58         /// 已签收,感谢使用顺丰,期待再次为您服务
59         /// </summary>
60         public string context { get; set; }
61         /// <summary>
62         /// 
63         /// </summary>
64         public string location { get; set; }
65     }
66 
67 }

实体类创建好后,我们还需要一个DLL文件,Newtonsoft.Json.DLL,看方式一

封装一个方法

 1         /// <summary>
 2         /// 将JSON转字符串(包括数组)
 3         /// </summary>
 4         /// <typeparam name="T"></typeparam>
 5         /// <param name="json"></param>
 6         /// <returns></returns>
 7         public static T JsonConvertObject<T>(string json)
 8         {
 9             return JsonConvert.DeserializeObject<T>(json);
10         }

调用即可

以下JSON帮助类

  1 using System.Collections.Generic;
  2 using System.IO;
  3 using Newtonsoft.Json;
  4 using Newtonsoft.Json.Linq;
  5 using System.Data;
  6 using System.Reflection;
  7 using System;
  8 
  9 namespace Sam.OA.Common
 10 {
 11     /// <summary>
 12     /// Json帮助类
 13     /// 使用前需引用开源项目类库:Newtonsoft.Json.dll
 14     /// </summary>
 15     public sealed class JsonHelper
 16     {
 17         /// <summary>
 18         /// 将对象序列化为json格式
 19         /// </summary>
 20         /// <param name="obj">序列化对象</param>
 21         /// <returns>json字符串</returns>
 22         public static string SerializeObjct(object obj)
 23         {            
 24             return JsonConvert.SerializeObject(obj);
 25         }
 26         /// <summary>
 27         /// 解析JSON字符串生成对象实体
 28         /// </summary>
 29         /// <typeparam name="T">实体类</typeparam>
 30         /// <param name="json">JSON字符串</param>
 31         /// <returns></returns>
 32         public static T JsonConvertObject<T>(string json)
 33         {
 34             return JsonConvert.DeserializeObject<T>(json);
 35         }
 36         /// <summary>
 37         /// 解析JSON字符串生成对象实体
 38         /// </summary>
 39         /// <typeparam name="T">对象类型</typeparam>
 40         /// <param name="json">json字符串</param>
 41         /// <returns></returns>
 42         public static T DeserializeJsonToObject<T>(string json) where T:class
 43         {
 44             JsonSerializer serializer = new JsonSerializer();
 45             StringReader sr = new StringReader(json);
 46             object obj = serializer.Deserialize(new JsonTextReader(sr), typeof(T));
 47             T t = obj as T;
 48             return t;
 49         }
 50         /// <summary>
 51         /// 解析JSON数组生成对象实体集合
 52         /// </summary>
 53         /// <typeparam name="T">对象类型</typeparam>
 54         /// <param name="json">json数组</param>
 55         /// <returns>对象实体集合</returns>
 56         public static List<T> DeserializeJsonToList<T>(string json) where T : class
 57         {
 58             JsonSerializer serializer = new JsonSerializer();
 59             StringReader sr = new StringReader(json);
 60             object obj = serializer.Deserialize(new JsonTextReader(sr), typeof(List<T>));
 61             List<T> list = obj as List<T>;
 62             return list;
 63         }
 64         /// <summary>
 65         /// 将JSON转数组
 66         /// 用法:jsonArr[0]["xxxx"]
 67         /// </summary>
 68         /// <param name="json">json字符串</param>
 69         /// <returns></returns>
 70         public static JArray GetToJsonList(string json)
 71         {
 72             JArray jsonArr = (JArray)JsonConvert.DeserializeObject(json);
 73             return jsonArr;
 74         }
 75         /// <summary>
 76         /// 将DataTable转换成实体类
 77         /// </summary>
 78         /// <typeparam name="T">实体类</typeparam>
 79         /// <param name="dt">DataTable</param>
 80         /// <returns></returns>
 81         public static List<T> DtConvertToModel<T>(DataTable dt) where T : new()
 82         {
 83             List<T> ts = new List<T>();
 84             foreach (DataRow dr in dt.Rows)
 85             {
 86                 T t = new T();
 87                 foreach (PropertyInfo pi in t.GetType().GetProperties())
 88                 {
 89                     if (dt.Columns.Contains(pi.Name))
 90                     {
 91                         if (!pi.CanWrite) continue;
 92                         var value = dr[pi.Name];
 93                         if (value != DBNull.Value)
 94                         {
 95                             switch (pi.PropertyType.FullName)
 96                             {
 97                                 case "System.Decimal":
 98                                     pi.SetValue(t, decimal.Parse(value.ToString()), null);
 99                                     break;
100                                 case "System.String":
101                                     pi.SetValue(t, value.ToString(), null);
102                                     break;
103                                 case "System.Int32":
104                                     pi.SetValue(t, int.Parse(value.ToString()), null);
105                                     break;
106                                 default:
107                                     pi.SetValue(t, value, null);
108                                     break;
109                             }
110                         }
111                     }
112                 }
113                 ts.Add(t);
114             }
115             return ts;
116         }
117     }
118 }
原文地址:https://www.cnblogs.com/grj001/p/12224041.html