關於解析json的總結
1 有時候返回的是對象例如 {result:1,list[]}
則接收到的首先是一個對象
利用 Newtonsoft.Json.Linq.JObject jo = (Newtonsoft.Json.Linq.JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(status_return);
可以得到list 的數組 接着對list數組解析
List<Slaughterhouse> list = DeserializeJsonToList<Slaughterhouse>(jo["result"].ToString());
或者
List<truck_car> list = JsonConvert.DeserializeObject<List<truck_car>>(status_return);
如果list 只是一個對象可以使用
Slaughterhouse Slaughterhousemodel = JsonConvert.DeserializeObject<Slaughterhouse>(jo["result"].ToString());
如果返回的直接就是數組直接用DeserializeJsonToList 或者 JsonConvert.DeserializeObject<List<truck_car>>(status_return);
public static List<T> DeserializeJsonToList<T>(string json)
{
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;
}
實體轉換為json 返回
JsonConvert.SerializeObject(projEntity) object 類型
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;
}
}
}


