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:如有抄袭请告知,侵删;

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