.net从网络接口地址获取json,然后解析成对象(一)

整理代码,今天遇到一个问题,就是从一个场景接口获取json,然后解析成对象。之前的时候都好好的,这次返回的json字符串里,由于字符编码的问题,格式上不能转换。一直以为是解析的过程编码有误,试了utf-8,gb2312,Default、Unicode,发现都不行,转回头去找获取的时候字符编码,发现是gbk,那就了然了。果断统一改成utf-8之后,数据获取就正常了。

这段代码从获取到解析,还不是很熟练,所以把整个过程都捋一遍。

首先是根据网络地址和参数获取的方法:

 1 public static string CreateOrderList(string _tid, string _dateFrom, string _dateTo, string _state, int _page)
 2 {
 3     try
 4     {
 5         StringBuilder serviceUrl = new StringBuilder();
 6         serviceUrl.Append("http://10.10.10.10/queryOrderOne?");
 7         serviceUrl.AppendFormat("tid={0}&createDateFrom={1}&createDateTo={2}&pageNum={4}&pageSize=10&orderState={3}", _tid, _dateFrom, _dateTo, _state, _page);
 8         string _result = ExcuteGet(serviceUrl.ToString(),"");
 9         return _result;
10 }
11     catch (Exception e)
12     {
13         AddLog(_tid, "获取订单List异常:" + e.Message, "GetOrderList");
14         return "";
15     }
16 }
ExcuteGet方法是获取地址的具体方法,代码如下:
 1 public static string ExcuteGet(string serviceUrl, string ReqInfo)
 2 {
 3     using (null)
 4     {
 5         ServicePointManager.ServerCertificateValidationCallback += ValidateServerCertificate;
 6         ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
 7         ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
 8         HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceUrl);
 9         request.CookieContainer = new CookieContainer();
10         request.Headers.Add("userName", "test");  //设置信息头用户名
11         request.Headers.Add("password", "123456"); //设置信息头密码
12         request.KeepAlive = true;
13         request.Method = "GET";
14         request.ContentType = "application/x-www-form-urlencoded";
15         //添加发送数据
16         Encoding encoding = Encoding.GetEncoding("utf-8");
17         if (!ReqInfo.Equals(""))
18         {
19             ReqInfo = "request=" + ReqInfo;
20             byte[] postData = encoding.GetBytes(ReqInfo);
21             request.ContentLength = postData.Length;
22             Stream requestStream = request.GetRequestStream();
23             requestStream.Write(postData, 0, postData.Length);
24         }
25         HttpWebResponse response = (HttpWebResponse)request.GetResponse();
26         //获取返回数据
27         Stream responseStream = response.GetResponseStream();
28         if (responseStream == null) return "";
29         StreamReader streamReader = new StreamReader(responseStream, encoding);
30         string retString = streamReader.ReadToEnd();
31         streamReader.Close();
32         responseStream.Close();
33         return retString;
34     }
35 }

还有一部分:

1 private static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
2 {
3     return true;
4 }

之后就是解析了,方法如下:

 1 public static List<OrderList> GetOrderIList(string _dStrat, string _dEnd, string _tid, string _billState, int _page)
 2 {
 3     using (null)
 4     {
 5         try
 6         {
 7             string _jsonResult = CreateOrderList(_tid, _dStrat, _dEnd, _billState, _page);
 8             OrderList _addResult = _jsonResult.JsonTodeserialize<OrderList>(Encoding.GetEncoding("utf-8"));
 9             List<OrderList> _searchList = new List<OrderList>();
10        _searchList.Add(_addResult);
11            return _searchList;
12         }
13         catch (Exception)
14         {
15             return new List<OrderList>();
16         }
17     }
18 }

orderlist对象如下:

 1 public class OrderList
 2 {
 3     public List<resultList> resultList { get; set; }
 4     public string totalRecord { get; set; }
 5     public string totalPage { get; set; }
 6 }
 7 public class resultList
 8 {
 9     public string orderState { get; set; }
10     public string Name { get; set; }
11     public string orderNum { get; set; }
12     public string productTypes { get; set; }
13 }
原文地址:https://www.cnblogs.com/Lvkang/p/9394572.html