下面是我們想要拼接出來的JSON字符串,返回給前台
{"success":"true","msg":"","data":[{"macName":"正面預拼裝機","state":1.0},{"macName":"正面拼板壓力架","state":1.0},{"macName":"板片翻身系統","state":1.0},{"macName":"反面預拼裝機","state":1.0},{"macName":"反面拼板壓力架","state":1.0},{"macName":"划線噴碼機","state":0.0},{"macName":"縱骨焊接安裝輥道","state":0.0},{"macName":"縱骨焊接機","state":1.0},{"macName":"T排焊接安裝輥道","state":0.0}]}
想看拼接后的JSON格式,這里可以推薦一個網站:https://www.json.cn/
之前都是用StringBuider手動拼接出JSON數據,拼出來的結果還容易錯,下面推薦一個簡單方式
首先,我們把JSON數組創建實體類,那么問題來了,這個實體類如何創建,這里推薦一個網站:http://www.bejson.com/convert/json2csharp/,只需要將JSON格式放入,就會幫我們自動轉成實體類
實體類也比較簡單,用到了List集合存放對象,下面Demo演示
實體類
public class MacState { /// <summary> /// 請求狀態 /// </summary> public string success { get; set; } /// <summary> /// 錯誤信息 /// </summary> public string msg { get; set; } /// <summary> /// JSON數組 /// </summary> public List<MacStateData> data { get; set; } } public class MacStateData { /// <summary> /// 設備名稱 /// </summary> public string macName { get; set; } /// <summary> /// 運行狀態 運行/停止(1/0) /// </summary> public decimal state { get; set; } }
函數(標紅色的注意!!!)
/// <summary> /// 設備狀態情況 /// </summary> /// <returns>JSON數組</returns> [WebMethod(Description ="設備狀態")] public string GetMacState() { MacState obj = new MacState(); try { DateTime NowDate = DateTime.Now; DataTable dt_his_count = new DataTable(); DataTable dt_mac_state = new DataTable(); int max_count = 200000; string add_his_sql = "INSERT INTO EMES_MAC_STATE_PORT_HIS (DEF_DATE) VALUES (TO_DATE('{0}','YYYY-MM-DD HH24:MI:SS'))"; DbUtil.ExecuteSql(string.Format(add_his_sql, NowDate)); string query_his_sql = "SELECT COUNT(*) FROM EMES_MAC_STATE_PORT_HIS"; dt_his_count = DbUtil.QueryDT(query_his_sql); if (Convert.ToDecimal(dt_his_count.Rows[0][0]??"0")>max_count) //接口日志超過20W條,自動刪除 { string del_sql = "DELETE FROM EMES_MAC_STATE_PORT_HIS"; DbUtil.ExecuteSql(del_sql); } string query_mac_state_sql = "SELECT MAC_NAME,STATE FROM EMES_MAC_STATE"; dt_mac_state = DbUtil.QueryDT(query_mac_state_sql); if (dt_mac_state.Rows.Count > 0) { obj.success = "true"; obj.msg = ""; obj.data = new List<MacStateData>(); //實例化JSON數組,不實例化要報錯 for (int i = 0; i < dt_mac_state.Rows.Count; i++) { MacStateData objData = new MacStateData(); //實例化JSON數組對象,用於添加JSON數組集合 objData.macName = dt_mac_state.Rows[i]["MAC_NAME"].ToString(); objData.state = Convert.ToDecimal(dt_mac_state.Rows[i]["STATE"] ?? "0"); obj.data.Add(objData); //添加JSON數組集合 } string res = JsonConvert.SerializeObject(obj); //轉JSON數組,演示用,下面講方法使用 return JSONHelper.ToJSON(obj); //調用的封裝函數,不用管,我們將上面的方式 } else { obj.success = "false"; obj.msg = "當前無數據信息,請稍后再試!"; obj.data = new List<MacStateData>(); return JSONHelper.ToJSON(obj); } } catch (Exception ex) { obj.success = "false"; obj.msg = ex.Message; obj.data = new List<MacStateData>(); return JSONHelper.ToJSON(obj); } }
注:將對象轉JSON數組,我們需要引入外部類庫:Newtonsoft.Json.dll,沒有的小伙伴請到我另外一篇博客下載:https://www.cnblogs.com/chenyanbin/p/11200415.html
引入命名空間: using Newtonsoft.Json; 方法使用: JsonConvert.SerializeObject(實體類對象)
JSON數組
搞定~~