C# http请求 + json序列化反序列化

来源:互联网 发布:网络教育专升本 编辑:程序博客网 时间:2024/05/16 04:17

最近公司游戏需要和php后台实现邮件功能,就在搞http请求和json的解析


其实很简单,就是一个函数,给出代码,这个是getHttp的,Post和另外三种模式的自己去网上搜索就行了


public string GetHttp(string url)
        {
            try
            {
                HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
                httpWebRequest.ContentType = "application/json";
                httpWebRequest.Method = "GET";
                httpWebRequest.Timeout = 20000;


                HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
                string responseContent = streamReader.ReadToEnd();
                httpWebResponse.Close();
                streamReader.Close();
                return responseContent;
            }
            catch (Exception ex)
            {
                //Log.Error(ex.ToString());
                return "0";
            }
        }


然后就是json的序列化和反序列化

首先引入命名空间

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;


然后就是string result =GetHttp(URL);

这个URL就是你的http请求的网址。


然后就是解析了

JObject jo = (JObject)JsonConvert.DeserializeObject(result );

我是在VS中查看好的,我们访问后是这样的,

{"code":0,"data":4}

所以解析的时候就是:

string code = jo["code"].ToString();
string data = jo["data"].ToString();

然后这个code就是字符串"0"  ,data就是字符串"4"


然后问题来了,如果是数组怎么解析呢?

也是一样的

假设data里面是一个数组,json中数组是用 [ ] 起来的,[ ]  里面的是包含很多个元素的数组!!!,举例一下就是

{"code":0,"data":[{"id":"5263","award":"0,11111","dateTime":"2017-07-27 16:09:23","mail":"3","state":"0","label":"3","url":"","platform":"0"},{"id":"5264","award":"0,11111","dateTime":"2017-07-27 16:05:02","mail":"2","state":"0","label":"2","url":"","platform":"0"},{"id":"5265","award":"0,11111","dateTime":"2017-07-27 16:03:00","mail":"1","state":"0","label":"1","url":"","platform":"0"},{"id":"5266","award":"0,11111","dateTime":"2017-07-27 14:59:12","mail":"1","state":"0","label":"1","url":"","platform":"0"}]}


然后上面这段东西解析的代码就是

JArray ja = (JArray)JsonConvert.DeserializeObject(data);

这时候ja就是普通的可以识别的数组了

然后ja[0]["id"]就是你数组第一个元素的id!!

简单吧!


下面是全部代码

  JObject jo = (JObject)JsonConvert.DeserializeObject(EmailListResult);
                string code = jo["code"].ToString();
                string data = jo["data"].ToString();
                if (data != null)
                {
                    JArray ja = (JArray)JsonConvert.DeserializeObject(data);
                    if (ja != null)
                    {
                        for (int i = ja.Count - 1; i >= 0; --i)
                        {
                            MailItem mailInfo = new MailItem();
                            mailInfo.id = int.Parse(ja[i]["id"].ToString());
                            mailInfo.award = ja[i]["award"].ToString();
                            mailInfo.sendtime = ja[i]["dateTime"].ToString();
                            mailInfo.content = ja[i]["mail"].ToString();
                            mailInfo.attachStatus = int.Parse(ja[i]["state"].ToString());
                            mailInfo.title = ja[i]["label"].ToString();
                            mailInfo.labelPic = ja[i]["url"].ToString();
                            receiveMailList.Add(mailInfo);
                        }
                    }
                }