c#使用JSON

json使用專用類

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Web.Security;
using System.Windows.Forms;

namespace 希立儀器
{
    class JSONCONVENT
    {

            //public String PRESSURE { get; set; }
            //public String LEAKAGE { get; set; }

        public class Student
        {
            public String PRESSURE { get; set; }
            public String LEAKAGE { get; set; }
       

        }

        /// <summary>
        ///檢測站位的參數類
        /// </summary>
        public class Mycheckworkstation
        {
            public String appid { get; set; }
            public int wid { get; set; }
            public String timestamp { get; set; }
            public String codestr { get; set; }
            public String sign { get; set; }

        }

        /// <summary>
        ///檢測站位時返回的參數類
        /// </summary>
        public class Mycheckworkstationback
        {
            public String appid { get; set; }
            public int wid { get; set; }
            public String timestamp { get; set; }
            public String codestr { get; set; }
            public String sign { get; set; }

        }


        /// <summary>
        ///提交測試結果的類
        /// </summary>
        public class MySavetestresult
        {
            public String appid { get; set; }
            public int wid { get; set; }
            public String timestamp { get; set; }
            public String codestr { get; set; }
            public int trid { get; set; }      
            public String sign { get; set; }
            List<Mytrel> trel = new List<Mytrel>();
            public List<Mytrel> trels
            {
                get { return trel; }
                set { trel = value; }
            }

        }//Class_end

        /// <summary>
        ///trel的類
        /// </summary>
        public class Mytrel
        {
            public int tid { get; set; }
            public String tval { get; set; }
            public String trel { get; set; }

        }//Class_end

        /// <summary>
        ///使用測試結果獲取追溯碼的類
        /// </summary>
        public class MyGetcodestrwithtest
        {
            public String appid { get; set; }
            public int wid { get; set; }
            public String timestamp { get; set; }
            public String tid { get; set; }
            public String tval { get; set; }
            public String sign { get; set; }

        }//Class_end

        /// <summary>
        /// 歷史記錄的類,成員爲歷史記錄的所有項
        /// </summary>
        public class ResultMsg
        {
            public String PRESSURE { get; set; }//壓力值
            public String LEAKAGE { get; set; }  //泄漏值
 
        }

        /// <summary>
        /// 將json字符串按照ASCII排序
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public static string StortJson(string json)
        {
            var dic = JsonConvert.DeserializeObject<SortedDictionary<string, object>>(json);
            SortedDictionary<string, object> keyValues = new SortedDictionary<string, object>(dic);
            keyValues.OrderBy(m => m.Key);//升序 把Key換成Value 就是對Value進行排序
                                          //keyValues.OrderByDescending(m => m.Key);//降序
            return JsonConvert.SerializeObject(keyValues);
        }

        /// <summary>
        /// 計算簽名
        /// </summary>
        /// <param name="str">字符串示例 = "appid=123456&codestr=XM001&timestamp=1569721598&wid=103" + "&key=N7Q76bLwVL6r5o2CVelafHLBXpvUsJJf";</param>
        /// <returns></returns>
        public static string UserMd5(string str)
        {
            
            string cl = str;
            string pwd = "";
            MD5 md5 = MD5.Create();//實例化一個md5對像
            // 加密後是一個字節類型的數組,這裏要注意編碼UTF8/Unicode等的選擇 
            byte[] hashBytes = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
            // 通過使用循環,將字節類型的數組轉換爲字符串,此字符串是常規字符格式化所得
 
            StringBuilder hex = new StringBuilder();
            for (int i = 0; i < hashBytes.Length; i++)
            {
                if ((hashBytes[i] & 0xFF) < 0x10)
                    hex.Append("0");
                hex.Append((hashBytes[i] & 0xFF).ToString("x"));
            }
            return hex.ToString();
        }


        public class MapInfo
        {
            public string mapName { get; set; }
            public string count { get; set; }
            public string type { get; set; }
            public string url { get; set; }
            public string progress { get; set; }
            public string waitCount { get; set; }

        }
        public class TestInfo
        {
            public string XMText { get; set; }
            public string XMTYPE { get; set; }
            public string XMCount { get; set; }
            List<MapInfo> mapInfo = new List<MapInfo>();
            public List<MapInfo> mapInfos
            {
                get { return mapInfo; }
                set { mapInfo = value; }
            }

        }//Class_end

        /// <summary>
        /// 將json字符串保存爲json格式文件
        /// </summary>
        /// <param name="path">保存路徑</param>
        /// <param name="contents">需要保存的字符串</param>
        /// <returns></returns>
        public static bool SaveFile(string path, string contents)
        {
            bool success = false;
            //追加文件
            using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite, FileShare.ReadWrite))
            {
                using (StreamWriter sw = new StreamWriter(fs, Encoding.UTF8))
                {
                    //開始寫入
                    sw.WriteLine(contents);
                    success = true;
                }
            }
            return success;
        }

        /// <summary>
        /// 獲取對應步驟的簽名字符串
        /// </summary>
        /// <param name="cmd"></param>
        /// <param name="appid">appid</param>
        /// <param name="codestr">追溯碼,最長64位字符</param>
        /// <param name="timestamp">時間戳(秒)</param>
        /// <param name="wid">工位編號</param>
        /// <param name="key"></param>
        /// <param name="tid">測試項編號</param>
        /// <param name="tval">測試值</param>
        /// <param name="trel">測試結果</param>
        /// <returns></returns>
        public static string MyGetStr(int cmd,string appid, string codestr, string timestamp, string wid, string key, string trid, string tval, string trel, string tid)
        {
            string str="";
            switch (cmd)
            {
                case 1: //檢查站位
                    str = "appid="+ appid + "&codestr="+ codestr + "&timestamp="+ timestamp + "&wid="+ wid + "&key="+ key;
                    break;

                case 2://保存測試結果
                    str = "appid=" + appid + "&codestr=" + codestr + "&timestamp=" + timestamp + "&trel=" + trel + "&tid=" + trid + "&wid=" + wid + "&key=" + key;
                    break;

                case 3://獲取導入數據
                    str = "appid=" + appid + "&codestr=" + codestr + "&timestamp=" + timestamp + "&wid=" + wid + "&key=" + key;
                    break;

                case 4://使用測試結果獲取追溯碼
                    str = "appid=" + appid + "&tid=" + tid + "&timestamp=" + timestamp + "&tval=" + tval + "&wid=" + wid + "&key=" + key;
                    break;

            }
            return str;
        }

        /*
         *  url:POST請求地址
         *  postData:json格式的請求報文,例如:{"key1":"value1","key2":"value2"}
         */

        public static string PostUrl(string url, string postData)
        {
            string result = "";

            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);

            req.Method = "POST";

            req.Timeout = 800;//設置請求超時時間,單位爲毫秒

            req.ContentType = "application/json";

            byte[] data = Encoding.UTF8.GetBytes(postData);

            req.ContentLength = data.Length;

            using (Stream reqStream = req.GetRequestStream())
            {
                reqStream.Write(data, 0, data.Length);

                reqStream.Close();
            }

            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();

            Stream stream = resp.GetResponseStream();

            //獲取響應內容
            using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
            {
                result = reader.ReadToEnd();
            }
            return result;
        }

        /// <summary>
        /// 使用POST方式發送json字符串請求結果
        /// </summary>
        /// <param name="url">url地址</param>
        /// <param name="postData">需要發送的json字符串</param>
        /// <returns></returns>
        public static string PostUrl1(string url, string postData)
        {

            string result = "";
  
            //json參數

            var request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "POST";
            request.ContentType = "application/json;charset=UTF-8";
            byte[] byteData = Encoding.UTF8.GetBytes(postData);
            int length = byteData.Length;
            request.ContentLength = length;
            Stream writer = request.GetRequestStream();
            writer.Write(byteData, 0, length);
            writer.Close();
            var response = (HttpWebResponse)request.GetResponse();
            var responseString = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8")).ReadToEnd();
            result = responseString.ToString();
            MessageBox.Show(responseString.ToString());

            return result;
        }
    
        /// <summary>
        ///  反序列json,獲取指定的值
        /// </summary>
        /// <param name="cmd"></param>
        /// <param name="jsonstr"></param>
        /// <returns></returns>
        public static void UNjSON(int cmd, string jsonstr,TextBox textBox)
        {
            CommonVariable.myMsg = "";
            CommonVariable.myErrorcode = "";
            JObject myjo = (JObject)JsonConvert.DeserializeObject(jsonstr);
            string successValue = myjo["success"].ToString();
           
            switch (cmd)
            {
                case 1: //檢查站位
                    //string jsonText1 = "{'tests':[{'tid':'62','tiname':'NAMENNNN'}],'trid':'60641','success':'true','timestamp':'1569721598','sign':'FFE57217B24317F6F5A4F8AB91662035'}";
                    if(successValue.Equals(true))
                    {
                        CommonVariable.myTrid =int.Parse(myjo["trid"].ToString());
                        JArray myjar = JArray.Parse(myjo["tests"].ToString());
                        
                        for (var i = 0; i < myjar.Count; i++)
                        {
                            JObject j = JObject.Parse(myjar[i].ToString());
                            CommonVariable.myTid = int.Parse(j["tid"].ToString());
                        }
                    }
                    else
                    {
                        CommonVariable.myMsg = myjo["msg"].ToString();
                        CommonVariable.myErrorcode = myjo["errorcode"].ToString();
                        textBox.Text = textBox.Text + DateTime.Now.ToString() + ";" + "Errorcode:" + CommonVariable.myErrorcode + ";" + "Msg:" + CommonVariable.myMsg + ";" + "\r\n";
                    }
               
                    break;

                case 2://保存測試結果
                    if (successValue.Equals(true))
                    {

                    }
                    else
                    {
                        CommonVariable.myMsg = myjo["msg"].ToString();
                        CommonVariable.myErrorcode = myjo["errorcode"].ToString();
                        textBox.Text = textBox.Text + DateTime.Now.ToString() + ";" + "Errorcode:" + CommonVariable.myErrorcode + ";" + "Msg:" + CommonVariable.myMsg + ";" + "\r\n";
                    }
                    break;

                case 3://獲取導入數據
                   
                    break;

                case 4://使用測試結果獲取追溯碼
                    
                    break;

            }
         
        }



    }
}

PS:如有抄襲請告知,侵刪;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章