• 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 }
  • 相关阅读:
    python学习笔记(五)
    python学习笔记(七)
    python小游戏——猜数字2.0
    python学习笔记(六)
    python小游戏——猜数字2.0
    python学习笔记(五)
    python中的in运算符
    python学习笔记(七)
    jmeter(4)响应断言 json断言 beanshell断言
    jmeter(2)几种不同的contenttype方式
  • 原文地址:https://www.cnblogs.com/grj001/p/12224041.html
Copyright © 2020-2023  润新知