郦东桥 發表於 2019-7-17 13:19:00

C#解析JSON数组

<h1><span style="font-family: 幼圆; color: rgba(255, 0, 0, 1)">方式一</span></h1>
<h2><span style="font-family: 幼圆">第一步:使用前,需下载:Newtonsoft.Json.dll</span></h2>
<p>没有的,请到我百度云盘下载</p>
<p>链接:https://pan.baidu.com/s/1JBkee4qhtW7XOyYFiGOL2Q&nbsp;<br>提取码:b5uq</p>
<h2>第二步:引入命名空间:using Newtonsoft.Json;</h2>
<h2>第三步:封装一个函数,方便以后使用</h2>
<p>待解析JSON数组</p>
<p><img src="https://img2018.cnblogs.com/blog/1504448/201907/1504448-20190717131529930-1212210582.png" alt=""></p>
<p>函数:</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 0, 1)">      public static Newtonsoft.Json.Linq.JArray GetToJsonList(string json)
</span> <span style="color: rgba(0, 0, 0, 1)">      {
</span> <span style="color: rgba(0, 0, 0, 1)">            Newtonsoft.Json.Linq.JArray jsonArr = (Newtonsoft.Json.Linq.JArray)JsonConvert.DeserializeObject(json);
</span> <span style="color: rgba(0, 0, 0, 1)">            return jsonArr;
</span>         }</pre>
</div>
<p>实现:</p>
<p><img src="https://img2018.cnblogs.com/blog/1504448/201907/1504448-20190717131819324-1933650410.png" alt=""></p>
<p>搞定~</p>
<h2><span style="color: rgba(255, 0, 0, 1)">方式二(推荐):</span></h2>
<p>  第一步就是要根据这个JSON来写出对应的实体类。用来存放数据。这个实体类如何写的?其实非常简单。因为一般不需要手动自己写,当然,你要是喜欢也可以自己写。不过我一般使用网站直接转换。自己百度 查一下,JSON转C#实体类,就会有很多网站给你转。</p>
<p>  我使用的是这个网站:http://www.bejson.com/convert/json2csharp/</p>
<div class="cnblogs_code">
<pre>{"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":""}]}</pre>
</div>
<p>  &nbsp;只需将JSON放到这个网站,自动给我们生成实体类即可</p>
<p>实体类:</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 0, 1)">using System;
</span> <span style="color: rgba(0, 0, 0, 1)">using System.Collections.Generic;
</span> <span style="color: rgba(0, 0, 0, 1)">using System.Linq;
</span> <span style="color: rgba(0, 0, 0, 1)">using System.Text;
</span>
<span style="color: rgba(0, 0, 0, 1)">namespace WindowsFormsApplication1
</span> <span style="color: rgba(0, 0, 0, 1)">{
</span>
   /// <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">    /// JSON数据的实体类
</span>   /// <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">    public class Root
</span> <span style="color: rgba(0, 0, 0, 1)">    {
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">      ///
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">      public string message { get; set; }
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">      ///
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">      public string nu { get; set; }
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">      ///
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">      public string ischeck { get; set; }
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">      ///
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">      public string condition { get; set; }
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">      ///
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">      public string com { get; set; }
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">      ///
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">      public string status { get; set; }
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">      ///
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">      public string state { get; set; }
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">      ///
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
         public List<span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">DataItem</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)"> data { get; set; }
</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span> <span style="color: rgba(0, 0, 0, 1)">    public class DataItem
</span> <span style="color: rgba(0, 0, 0, 1)">    {
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">      ///
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">      public string time { get; set; }
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">      ///
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">      public string ftime { get; set; }
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">      /// 已签收,感谢使用顺丰,期待再次为您服务
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">      public string context { get; set; }
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">      ///
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">      public string location { get; set; }
</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span>
}</pre>
</div>
<p>实体类创建好后,我们还需要一个DLL文件,Newtonsoft.Json.DLL,看方式一</p>
<p>封装一个方法</p>
<div class="cnblogs_code">
<pre>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 0, 1)">      /// 将JSON转字符串(包括数组)
</span>         /// <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">summary</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
         /// <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">typeparam </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="T"</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">typeparam</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
         /// <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">param </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="json"</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">param</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
         /// <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">returns</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">returns</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
         public static T JsonConvertObject<span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">T</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">(string json)
</span> <span style="color: rgba(0, 0, 0, 1)">      {
</span>             return JsonConvert.DeserializeObject<span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">T</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">(json);
</span>         }</pre>
</div>
<p>调用即可</p>
<p>&nbsp;</p>
<p>以下JSON帮助类</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System.Collections.Generic;
</span> <span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System.IO;
</span> <span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> Newtonsoft.Json;
</span> <span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> Newtonsoft.Json.Linq;
</span> <span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System.Data;
</span> <span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System.Reflection;
</span> <span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System;
</span>
<span style="color: rgba(0, 0, 255, 1)">namespace</span><span style="color: rgba(0, 0, 0, 1)"> Sam.OA.Common
</span> <span style="color: rgba(0, 0, 0, 1)">{
</span>   <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;summary&gt;</span>
   <span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> Json帮助类
</span>   <span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 使用前需引用开源项目类库:Newtonsoft.Json.dll
</span>   <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;/summary&gt;</span>
   <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">sealed</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> JsonHelper
</span> <span style="color: rgba(0, 0, 0, 1)">    {
</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;summary&gt;</span>
         <span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 将对象序列化为json格式
</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;/summary&gt;</span>
         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;param name="obj"&gt;</span><span style="color: rgba(0, 128, 0, 1)">序列化对象</span><span style="color: rgba(128, 128, 128, 1)">&lt;/param&gt;</span>
         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;returns&gt;</span><span style="color: rgba(0, 128, 0, 1)">json字符串</span><span style="color: rgba(128, 128, 128, 1)">&lt;/returns&gt;</span>
         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">string</span> SerializeObjct(<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> obj)
</span> <span style="color: rgba(0, 0, 0, 1)">      {            
</span>             <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> JsonConvert.SerializeObject(obj);
</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;summary&gt;</span>
         <span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 解析JSON字符串生成对象实体
</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;/summary&gt;</span>
         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;typeparam name="T"&gt;</span><span style="color: rgba(0, 128, 0, 1)">实体类</span><span style="color: rgba(128, 128, 128, 1)">&lt;/typeparam&gt;</span>
         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;param name="json"&gt;</span><span style="color: rgba(0, 128, 0, 1)">JSON字符串</span><span style="color: rgba(128, 128, 128, 1)">&lt;/param&gt;</span>
         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;returns&gt;&lt;/returns&gt;</span>
         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> T JsonConvertObject&lt;T&gt;(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> json)
</span> <span style="color: rgba(0, 0, 0, 1)">      {
</span>             <span style="color: rgba(0, 0, 255, 1)">return</span> JsonConvert.DeserializeObject&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)">(json);
</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;summary&gt;</span>
         <span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 解析JSON字符串生成对象实体
</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;/summary&gt;</span>
         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;typeparam name="T"&gt;</span><span style="color: rgba(0, 128, 0, 1)">对象类型</span><span style="color: rgba(128, 128, 128, 1)">&lt;/typeparam&gt;</span>
         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;param name="json"&gt;</span><span style="color: rgba(0, 128, 0, 1)">json字符串</span><span style="color: rgba(128, 128, 128, 1)">&lt;/param&gt;</span>
         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;returns&gt;&lt;/returns&gt;</span>
         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> T DeserializeJsonToObject&lt;T&gt;(<span style="color: rgba(0, 0, 255, 1)">string</span> json) <span style="color: rgba(0, 0, 255, 1)">where</span> T:<span style="color: rgba(0, 0, 255, 1)">class</span>
<span style="color: rgba(0, 0, 0, 1)">      {
</span>             JsonSerializer serializer = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> JsonSerializer();
</span>             StringReader sr = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> StringReader(json);
</span>             <span style="color: rgba(0, 0, 255, 1)">object</span> obj = serializer.Deserialize(<span style="color: rgba(0, 0, 255, 1)">new</span> JsonTextReader(sr), <span style="color: rgba(0, 0, 255, 1)">typeof</span><span style="color: rgba(0, 0, 0, 1)">(T));
</span>             T t = obj <span style="color: rgba(0, 0, 255, 1)">as</span><span style="color: rgba(0, 0, 0, 1)"> T;
</span>             <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> t;
</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;summary&gt;</span>
         <span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 解析JSON数组生成对象实体集合
</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;/summary&gt;</span>
         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;typeparam name="T"&gt;</span><span style="color: rgba(0, 128, 0, 1)">对象类型</span><span style="color: rgba(128, 128, 128, 1)">&lt;/typeparam&gt;</span>
         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;param name="json"&gt;</span><span style="color: rgba(0, 128, 0, 1)">json数组</span><span style="color: rgba(128, 128, 128, 1)">&lt;/param&gt;</span>
         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;returns&gt;</span><span style="color: rgba(0, 128, 0, 1)">对象实体集合</span><span style="color: rgba(128, 128, 128, 1)">&lt;/returns&gt;</span>
         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> List&lt;T&gt; DeserializeJsonToList&lt;T&gt;(<span style="color: rgba(0, 0, 255, 1)">string</span> json) <span style="color: rgba(0, 0, 255, 1)">where</span> T : <span style="color: rgba(0, 0, 255, 1)">class</span>
<span style="color: rgba(0, 0, 0, 1)">      {
</span>             JsonSerializer serializer = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> JsonSerializer();
</span>             StringReader sr = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> StringReader(json);
</span>             <span style="color: rgba(0, 0, 255, 1)">object</span> obj = serializer.Deserialize(<span style="color: rgba(0, 0, 255, 1)">new</span> JsonTextReader(sr), <span style="color: rgba(0, 0, 255, 1)">typeof</span>(List&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)">));
</span>             List&lt;T&gt; list = obj <span style="color: rgba(0, 0, 255, 1)">as</span> List&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)">;
</span>             <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> list;
</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;summary&gt;</span>
         <span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 将JSON转数组
</span>         <span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 用法:jsonArr["xxxx"]
</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;/summary&gt;</span>
         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;param name="json"&gt;</span><span style="color: rgba(0, 128, 0, 1)">json字符串</span><span style="color: rgba(128, 128, 128, 1)">&lt;/param&gt;</span>
         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;returns&gt;&lt;/returns&gt;</span>
         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> JArray GetToJsonList(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> json)
</span> <span style="color: rgba(0, 0, 0, 1)">      {
</span>             JArray jsonArr =<span style="color: rgba(0, 0, 0, 1)"> (JArray)JsonConvert.DeserializeObject(json);
</span>             <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jsonArr;
</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;summary&gt;</span>
         <span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 将DataTable转换成实体类
</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;/summary&gt;</span>
         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;typeparam name="T"&gt;</span><span style="color: rgba(0, 128, 0, 1)">实体类</span><span style="color: rgba(128, 128, 128, 1)">&lt;/typeparam&gt;</span>
         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;param name="dt"&gt;</span><span style="color: rgba(0, 128, 0, 1)">DataTable</span><span style="color: rgba(128, 128, 128, 1)">&lt;/param&gt;</span>
         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;returns&gt;&lt;/returns&gt;</span>
         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> List&lt;T&gt; DtConvertToModel&lt;T&gt;(DataTable dt) <span style="color: rgba(0, 0, 255, 1)">where</span> T : <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)">()
</span> <span style="color: rgba(0, 0, 0, 1)">      {
</span>             List&lt;T&gt; ts = <span style="color: rgba(0, 0, 255, 1)">new</span> List&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)">();
</span>             <span style="color: rgba(0, 0, 255, 1)">foreach</span> (DataRow dr <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> dt.Rows)
</span> <span style="color: rgba(0, 0, 0, 1)">            {
</span>               T t = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> T();
</span>               <span style="color: rgba(0, 0, 255, 1)">foreach</span> (PropertyInfo pi <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> t.GetType().GetProperties())
</span> <span style="color: rgba(0, 0, 0, 1)">                {
</span>                     <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (dt.Columns.Contains(pi.Name))
</span> <span style="color: rgba(0, 0, 0, 1)">                  {
</span>                         <span style="color: rgba(0, 0, 255, 1)">if</span> (!pi.CanWrite) <span style="color: rgba(0, 0, 255, 1)">continue</span><span style="color: rgba(0, 0, 0, 1)">;
</span>                         <span style="color: rgba(0, 0, 255, 1)">var</span> value =<span style="color: rgba(0, 0, 0, 1)"> dr;
</span>                         <span style="color: rgba(0, 0, 255, 1)">if</span> (value !=<span style="color: rgba(0, 0, 0, 1)"> DBNull.Value)
</span> <span style="color: rgba(0, 0, 0, 1)">                        {
</span>                           <span style="color: rgba(0, 0, 255, 1)">switch</span><span style="color: rgba(0, 0, 0, 1)"> (pi.PropertyType.FullName)
</span> <span style="color: rgba(0, 0, 0, 1)">                            {
</span>                                 <span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">System.Decimal</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
</span>                                     pi.SetValue(t, <span style="color: rgba(0, 0, 255, 1)">decimal</span>.Parse(value.ToString()), <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">);
</span>                                     <span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span>                                 <span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">System.String</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
</span>                                     pi.SetValue(t, value.ToString(), <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">);
</span>                                     <span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span>                                 <span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">System.Int32</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
</span>                                     pi.SetValue(t, <span style="color: rgba(0, 0, 255, 1)">int</span>.Parse(value.ToString()), <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">);
</span>                                     <span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span>                                 <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)">:
</span>                                     pi.SetValue(t, value, <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">);
</span>                                     <span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span> <span style="color: rgba(0, 0, 0, 1)">                            }
</span> <span style="color: rgba(0, 0, 0, 1)">                        }
</span> <span style="color: rgba(0, 0, 0, 1)">                  }
</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span> <span style="color: rgba(0, 0, 0, 1)">                ts.Add(t);
</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span>             <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> ts;
</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span> }</pre>
</div>

</div>
<div id="MySignature" role="contentinfo">
    <div><b>作者:陈彦斌</b></div>
<div><b>出处:https://www.cnblogs.com/chenyanbin/
</b></div>
<div>
<b>关注:</b>
<strong><span style="color: #ff0000">点我哟(^U^)ノ~YO</span></strong>
</div><br><br>
来源:https://www.cnblogs.com/chenyanbin/p/11200415.html
頁: [1]
查看完整版本: C#解析JSON数组