C# Json形式向服务器提交信息或将json对象反序列化为类

首先是Get和Post方法,用于向服务器提交信息或是接收服务器发送的Json字符串,这两个方法转载自https://www.cnblogs.com/zoujinhua/p/10330084.html#4706892,里面很详细的介绍了大部分的代码,但是我刚用的时候不知道为什么不能获取或接收消息,所以自己来写了这篇博客,希望有类似问题的伙伴们可以借鉴

获取、发送Json字符串

新建类(HttpUitls)

 public static string Get(string Url)
        {
            //System.GC.Collect();
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
            request.Proxy = null;
            request.KeepAlive = false;
            request.Method = "GET";
            request.ContentType = "application/json; charset=UTF-8";
            request.AutomaticDecompression = DecompressionMethods.GZip;

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream myResponseStream = response.GetResponseStream();
            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
            string retString = myStreamReader.ReadToEnd();

            myStreamReader.Close();
            myResponseStream.Close();

            if (response != null)
            {
                response.Close();
            }
            if (request != null)
            {
                request.Abort();
            }

            return retString;
        }
        public static string Post(string JsonString, string Url, Socket sockClient)
        {
            var request = (HttpWebRequest)WebRequest.Create(Url);
            request.Timeout = 3000;
            request.Method = "POST";
            request.ContentType = "application/json;charset=UTF-8";
            byte[] byteData = Encoding.UTF8.GetBytes(JsonString);
            int length = byteData.Length;
            request.ContentLength = length;
            Stream writer = request.GetRequestStream();
            writer.Write(byteData, 0, length);
            writer.Close();
            try
            {
                var response = (HttpWebResponse)request.GetResponse();
                var responseString = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8")).ReadToEnd();
                string res = responseString.ToString();
                return res;
            }
            catch
            {
                sockClient.Close();
                return null;
            }
            
        } 

上面代码直接用就可以啦

主窗口代码:

 LoginPackage logindata = new LoginPackage();
                    logindata.loginCode = UserCode;
                    logindata.loginPwd = Password;
                    var serializer = new JavaScriptSerializer();
                    //序列化成json字符串
                    string serializedResult = serializer.Serialize(logindata);
                    string _url = "http://总之就是你要访问的接口的URL啦";
                    string res = HttpUitls.Post(serializedResult, _url, sockClient);

 LoginPackage是我自己新建的类,我要访问登录界面,需要用户名和密码,所以类中包含两项信息,小伙伴们可以自己随意添加,res中就是发送登录信息后服务器返回的json字符串

JavaScriptSerializer好像是一个特殊的命名空间里的,大家可以去官网查一查具体用到什么库
可以用serializer.Deserialize<ObservableCollection<与json字符串格式相同的类>>(res);反序列化得到你想要的信息列表
 internal class LoginPackage
    {
        public string loginCode { get; set; }
        public string loginPwd { get; set; }
    }

  

 

posted @ 2020-11-10 09:44  Xinxin-fighting  阅读(171)  评论(0)    收藏  举报