zoukankan      html  css  js  c++  java
  • .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 }
  • 相关阅读:
    HashMap与ArrayList的相互嵌套
    Mysql与Oracle 的对比
    什么是子查询
    创建存储过程
    cmd 快捷键
    navicat 快捷键
    Mysql的数据类型 6种
    Mysql与Oracle 的使用区别
    怎样修复ie浏览器
    Linux官方内置Bash中新发现一个非常严重安全漏洞
  • 原文地址:https://www.cnblogs.com/Lvkang/p/9394572.html
Copyright © 2011-2022 走看看