基于HttpWebRequest获取json数据,解析后动态展示

一.项目介绍

此项目是由朋友介绍,开发智慧渔业大数据展示系统。采样设备分布在鱼塘,由物流网将实际数据上传至服务器。本人从服务器上获取数据进行展示。

二.代码展示

1.HttpUitls类

 public class HttpUitls
    {
        public static string Get(string Url)
        {
            System.Net.ServicePointManager.DefaultConnectionLimit = 512;
            //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;
            try
            {
                response = (HttpWebResponse)request.GetResponse();
            }
            catch
            {
                XtraMessageBox.Show("请连接互联网!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                Environment.Exit(0);
                return null;
            }
            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 Url, string Data, string Referer)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
            request.Method = "POST";
            request.Referer = Referer;
            byte[] bytes = Encoding.UTF8.GetBytes(Data);
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = bytes.Length;
            Stream myResponseStream = request.GetRequestStream();
            myResponseStream.Write(bytes, 0, bytes.Length);

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

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

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

2.Json实体类

//**************************************设备列表类**************************************
//http://open.sennor.net:8088/device/getDeviceList?secretKey=8A7F66AA55142AC3
public class DeviceListDatasItem
{
    /// <summary>
    /// 
    /// </summary>
    public int id { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string deviceNumber { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string creatTime { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string connectType { get; set; }
    /// <summary>
    /// 未命名设备
    /// </summary>
    public string name { get; set; }
}

public class DeviceList
{
    /// <summary>
    /// 
    /// </summary>
    public int size { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string isLast { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public List<DeviceListDatasItem> datas { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string state { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public int page { get; set; }
}
//**************************************气象信息(获取风向、风速)**************************************
//http://open.sennor.net:8088/device/getDeviceInfo?secretKey=8A7F66AA55142AC3&deviceNumber=171CB7402F25
public class Data_Meteorology
{
    /// <summary>
    /// 
    /// </summary>
    public int id { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string deviceNumber { get; set; }
    /// <summary>
    /// 未命名设备
    /// </summary>
    public string name { get; set; }
    /// <summary>
    /// 温度 / 湿度 / 光照度 / 大气压-k / PM2.5 / PM10 / 噪声 / 风速 / 风向 / 信号强度 / 错误码 / 版本号
    /// </summary>
    public string type { get; set; }
    /// <summary>
    /// 25.1  ℃ | 74.1 %RH | 37629 Lux | 95.4 Kpa | 23 ug/m3 | 33 ug/m3 | 66.3 dB  | error1 | 正南 | 164 RSSI | 144   | 2 Version
    /// </summary>
    public string data { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string time { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string onLineState { get; set; }
}

public class Root_Meteorology
{
    /// <summary>
    /// 查询成功
    /// </summary>
    public string msg { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public Data_Meteorology data { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string state { get; set; }
}
//主设备信息(获取->水温 / 溶解氧 / 水中PH / 氨氮)
//http://open.sennor.net:8088/device/getDeviceInfo?secretKey=8A7F66AA55142AC3&deviceNumber=171CB7406330
public class Data_Main
{
    /// <summary>
    /// 
    /// </summary>
    public int id { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string deviceNumber { get; set; }
    /// <summary>
    /// 未命名设备
    /// </summary>
    public string name { get; set; }
    /// <summary>
    /// 水温 / 溶解氧 / 水中PH / 氨氮 / 信号强度 / 错误码 / 版本号
    /// </summary>
    public string type { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string data { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string time { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string onLineState { get; set; }
}

public class Root_Main
{
    /// <summary>
    /// 查询成功
    /// </summary>
    public string msg { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public Data_Main data { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string state { get; set; }
}

//副设备信息(只获取水中电导率)
//http://open.sennor.net:8088/device/getDeviceInfo?secretKey=8A7F66AA55142AC3&deviceNumber=171CB74122F1
public class Data_Assistant
{
    /// <summary>
    /// 
    /// </summary>
    public int id { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string deviceNumber { get; set; }
    /// <summary>
    /// 未命名设备
    /// </summary>
    public string name { get; set; }
    /// <summary>
    /// 水温 / 溶解氧 / 水中PH / 氨氮 / 水中电导率 / 信号强度 / 错误码 / 版本号
    /// </summary>
    public string type { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string data { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string time { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string onLineState { get; set; }
}

public class Root_Assistant
{
    /// <summary>
    /// 查询成功
    /// </summary>
    public string msg { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public Data_Assistant data { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string state { get; set; }
}

3.调用示例

private string[] GetNowData()
    {
        try
        {
            string[] str = new string[6];
            string str_Temep, str_Pa, str_PH, str_AD, str_Wind, str_Water, str_O2;
            #region 主设备
            string url_Main = "http://open.sennor.net:8088/device/getDeviceInfo?secretKey=8A7F66AA55142AC3&deviceNumber=171CB7406330";
            string getJson_Main = HttpUitls.Get(url_Main);
            Root_Main rt_Main = JsonConvert.DeserializeObject<Root_Main>(getJson_Main);
            string data_Main = rt_Main.data.data;
            string[] datas_Main = data_Main.Split('|');
            //水温 /    溶解氧 /     水中PH /   氨氮 /   信号强度 /   错误码 / 版本号
            //26.2 ℃ | 11.38 mg/L | 9.25 pH | 0.3 mg/L | 152 RSSI | 133   | 2 Version
            //str_Temep = datas_Main[0].Trim(' ');
            str_O2 = datas_Main[1].Trim(' ');
            //str_PH = datas_Main[2].Trim(' ');
            //str_AD = datas_Main[3].Trim(' ');
            #endregion

            #region 副设备
            string url_Assistant = "http://open.sennor.net:8088/device/getDeviceInfo?secretKey=8A7F66AA55142AC3&deviceNumber=171CB74122F1";
            string getJson_Assistant = HttpUitls.Get(url_Assistant);
            //传入我们的实体类还有需要解析的JSON字符串这样就OK了。然后就可以通过实体类使用数据了。
            Root_Assistant rt_Assistant = JsonConvert.DeserializeObject<Root_Assistant>(getJson_Assistant);
            string data_Assistant = rt_Assistant.data.data;
            string[] datas_Assistant = data_Assistant.Split('|');
            //水温 / 溶解氧 / 水中PH / 氨氮 /     水中电导率 / 信号强度 / 错误码 / 版本号
            //21 ℃ | error1 | 7.5 pH | 0.23 mg/L | 653 us/cm | 156 RSSI | 202   | 2 Version
            str_Temep = datas_Assistant[0].Trim(' ');
            //str_O2 = datas_Assistant[1].Trim(' ');
            str_PH = datas_Assistant[2].Trim(' ');
            str_AD = datas_Assistant[3].Trim(' ');
            str_Water = datas_Assistant[4].Trim(' ');
            #endregion

            #region 气象设备
            string url_Meteorology = " http://open.sennor.net:8088/device/getDeviceInfo?secretKey=8A7F66AA55142AC3&deviceNumber=171CB7402F25";
            string getJson_Meteorology = HttpUitls.Get(url_Meteorology);
            //传入我们的实体类还有需要解析的JSON字符串这样就OK了。然后就可以通过实体类使用数据了。
            Root_Meteorology rt_Meteorology = JsonConvert.DeserializeObject<Root_Meteorology>(getJson_Meteorology);
            string data_Meteorology = rt_Meteorology.data.data;
            string[] datas_Meteorology = data_Meteorology.Split('|');
            //温度 /      湿度 /     光照度 /   大气压-k / PM2.5 /     PM10 /      噪声 /    风速 /  风向 / 信号强度 / 错误码 / 版本号
            //25.1  ℃ | 74.1 %RH | 37629 Lux | 95.4 Kpa | 23 ug/m3 | 33 ug/m3 | 66.3 dB  | error1 | 正南 | 164 RSSI | 144   | 2 Version
            str_Pa = datas_Meteorology[3].Trim(' ');
            str_Wind = datas_Meteorology[8].Trim(' ');
            #endregion

            label_Teme.Text = str_Temep;
            label_Pa.Text = str_Pa;
            label_PH.Text = str_PH;
            label_AD.Text = str_AD;
            label_Wind.Text = str_Wind;
            label_Water.Text = str_Water;
            label_O2.Text = str_O2;

            str[0] = str_Temep;
            str[1] = str_Pa;
            str[2] = str_AD;
            str[3] = str_PH;
            str[4] = str_Water;
            str[5] = str_O2;
            return str;
        }
        catch
        {
            return null;
        }
    }

4.定时器循环展示数据


```csharp
 private void timer_Tick(object sender, EventArgs e)
    {
        string str_timer = DateTime.Now.ToString("yyyy年MM月dd日 HH:mm:ss");
        label_Time.Text = str_timer;

        if (count >= 60 * 3)
        {
            count = 0;
            DateTime argument = DateTime.Now;
            string[] str = GetNowData();
            if(str==null)
            {
                return;
            }
            #region 温度   26.2 ℃
            {
                SeriesPoint pointToUpdate1 = new SeriesPoint();
                Random random = new Random();

                DateTime minDate = argument.AddMinutes(-30);
                int pointsToRemoveCount = 0;
                foreach (SeriesPoint point in Series_WaterTemper.Points)
                {
                    if (point.DateTimeArgument < minDate)
                    {
                        pointsToRemoveCount++;
                    }
                    if (pointsToRemoveCount < Series_WaterTemper.Points.Count)
                    {
                        pointsToRemoveCount--;
                    }
                }

                string temep = str[0].Substring(0, str[0].Length - 2);
                double data = Convert.ToDouble(temep);
                //判断阈值
                JudgeValue(label_Warn_Temep, data, WarnValueClass.value_Temep_Up, WarnValueClass.value_Temep_Down);
                pointToUpdate1 = new SeriesPoint(argument, data);
                AddPoint(Series_WaterTemper, pointToUpdate1);
                if (pointsToRemoveCount > 0)
                {
                    Series_WaterTemper.Points.RemoveRange(0, pointsToRemoveCount);
                }
                SwiftPlotDiagram diagram = chartControl_Temep.Diagram as SwiftPlotDiagram;
                if (diagram != null)//&& diagram.AxisX.DateTimeMeasureUnit == DateTimeMeasurementUnit.Millisecond)
                                    //if (diagram != null && diagram.AxisX.MeasureUnit == DateTimeMeasureUnit.Millisecond)
                {
                    diagram.AxisX.VisualRange.SetMinMaxValues(minDate, argument);
                    //{ 2021 / 8 / 27 10:39:51}
                }
            }
            #endregion
            #region 氨氮含量
            {
                SeriesPoint pointToUpdate1 = new SeriesPoint();
                Random random = new Random();

                DateTime minDate = argument.AddMinutes(-30);
                int pointsToRemoveCount = 0;
                foreach (SeriesPoint point in Series_AD.Points)
                {
                    if (point.DateTimeArgument < minDate)
                    {
                        pointsToRemoveCount++;
                    }
                    if (pointsToRemoveCount < Series_AD.Points.Count)
                    {
                        pointsToRemoveCount--;
                    }
                }
                string AD = str[2].Substring(0, str[2].Length - 5);
                double data = Convert.ToDouble(AD);
                //判断阈值
                JudgeValue(label_Warn_AD, data, WarnValueClass.value_AD_Up, WarnValueClass.value_AD_Down);
                pointToUpdate1 = new SeriesPoint(argument, data);
                AddPoint(Series_AD, pointToUpdate1);

                if (pointsToRemoveCount > 0)
                {
                    Series_AD.Points.RemoveRange(0, pointsToRemoveCount);
                }
                SwiftPlotDiagram diagram = chartControl_AD.Diagram as SwiftPlotDiagram;
                if (diagram != null)//&& diagram.AxisX.DateTimeMeasureUnit == DateTimeMeasurementUnit.Millisecond)
                                    //if (diagram != null && diagram.AxisX.MeasureUnit == DateTimeMeasureUnit.Millisecond)
                {
                    diagram.AxisX.VisualRange.SetMinMaxValues(minDate, argument);
                    //{ 2021 / 8 / 27 10:39:51}
                }
            }
            #endregion
            #region PH
            {
                SeriesPoint pointToUpdate1 = new SeriesPoint();
                Random random = new Random();

                DateTime minDate = argument.AddMinutes(-30);
                int pointsToRemoveCount = 0;
                foreach (SeriesPoint point in Series_PH.Points)
                {
                    if (point.DateTimeArgument < minDate)
                    {
                        pointsToRemoveCount++;
                    }
                    if (pointsToRemoveCount < Series_PH.Points.Count)
                    {
                        pointsToRemoveCount--;
                    }
                }

                string tmp = str[3].Substring(0, str[3].Length - 3);
                double data = Convert.ToDouble(tmp);
                //判断阈值
                JudgeValue(label_Warn_PH, data, WarnValueClass.value_PH_Up, WarnValueClass.value_PH_Down);
                pointToUpdate1 = new SeriesPoint(argument, data);
                AddPoint(Series_PH, pointToUpdate1);
                if (pointsToRemoveCount > 0)
                {
                    Series_PH.Points.RemoveRange(0, pointsToRemoveCount);
                }
                SwiftPlotDiagram diagram = chartControl_PH.Diagram as SwiftPlotDiagram;
                if (diagram != null)//&& diagram.AxisX.DateTimeMeasureUnit == DateTimeMeasurementUnit.Millisecond)
                                    //if (diagram != null && diagram.AxisX.MeasureUnit == DateTimeMeasureUnit.Millisecond)
                {
                    diagram.AxisX.VisualRange.SetMinMaxValues(minDate, argument);
                    //{ 2021 / 8 / 27 10:39:51}
                }
            }
            #endregion
            #region 容氧量
            {
                SeriesPoint pointToUpdate1 = new SeriesPoint();
                Random random = new Random();

                DateTime minDate = argument.AddMinutes(-30);
                int pointsToRemoveCount = 0;
                foreach (SeriesPoint point in Series_O2.Points)
                {
                    if (point.DateTimeArgument < minDate)
                    {
                        pointsToRemoveCount++;
                    }
                    if (pointsToRemoveCount < Series_O2.Points.Count)
                    {
                        pointsToRemoveCount--;
                    }
                }
                string tmp = str[5].Substring(0, str[5].Length - 5);
                double data = Convert.ToDouble(tmp);
                //判断阈值
                JudgeValue(label_Warn_O2, data, WarnValueClass.value_O2_Up, WarnValueClass.value_O2_Down);
                pointToUpdate1 = new SeriesPoint(argument, data);
                AddPoint(Series_O2, pointToUpdate1);
                if (pointsToRemoveCount > 0)
                {
                    Series_O2.Points.RemoveRange(0, pointsToRemoveCount);
                }
                SwiftPlotDiagram diagram = chartControl_O2.Diagram as SwiftPlotDiagram;
                if (diagram != null)//&& diagram.AxisX.DateTimeMeasureUnit == DateTimeMeasurementUnit.Millisecond)
                                    //if (diagram != null && diagram.AxisX.MeasureUnit == DateTimeMeasureUnit.Millisecond)
                {
                    diagram.AxisX.VisualRange.SetMinMaxValues(minDate, argument);
                    //{ 2021 / 8 / 27 10:39:51}
                }
            }
            #endregion
            #region 水导电率
            {
                SeriesPoint pointToUpdate1 = new SeriesPoint();
                Random random = new Random();

                DateTime minDate = argument.AddMinutes(-30);
                int pointsToRemoveCount = 0;
                foreach (SeriesPoint point in Series_Water.Points)
                {
                    if (point.DateTimeArgument < minDate)
                    {
                        pointsToRemoveCount++;
                    }
                    if (pointsToRemoveCount < Series_Water.Points.Count)
                    {
                        pointsToRemoveCount--;
                    }
                }
                //653 us/cm
                string tmp = str[4].Substring(0, str[4].Length - 6);
                double data = Convert.ToDouble(tmp);
                //判断阈值
                JudgeValue(label_Warn_Water, data, WarnValueClass.value_Water_Up, WarnValueClass.value_Water_Down);
                pointToUpdate1 = new SeriesPoint(argument, data);
                AddPoint(Series_Water, pointToUpdate1);
                if (pointsToRemoveCount > 0)
                {
                    Series_Water.Points.RemoveRange(0, pointsToRemoveCount);
                }
                SwiftPlotDiagram diagram = chartControl_Water.Diagram as SwiftPlotDiagram;
                if (diagram != null)//&& diagram.AxisX.DateTimeMeasureUnit == DateTimeMeasurementUnit.Millisecond)
                                    //if (diagram != null && diagram.AxisX.MeasureUnit == DateTimeMeasureUnit.Millisecond)
                {
                    diagram.AxisX.VisualRange.SetMinMaxValues(minDate, argument);
                    //{ 2021 / 8 / 27 10:39:51}
                }
            }
            #endregion
            #region 气压
            {
                SeriesPoint pointToUpdate1 = new SeriesPoint();
                Random random = new Random();

                DateTime minDate = argument.AddMinutes(-30);
                int pointsToRemoveCount = 0;
                foreach (SeriesPoint point in Series_Pa.Points)
                {
                    if (point.DateTimeArgument < minDate)
                    {
                        pointsToRemoveCount++;
                    }
                    if (pointsToRemoveCount < Series_Pa.Points.Count)
                    {
                        pointsToRemoveCount--;
                    }
                }
                string tmp = str[1].Substring(0, str[1].Length - 4);
                double data = Convert.ToDouble(tmp);
                //判断阈值
                JudgeValue(label_Warn_Pa, data, WarnValueClass.value_Pa_Up, WarnValueClass.value_Pa_Down);
                pointToUpdate1 = new SeriesPoint(argument, data);
                AddPoint(Series_Pa, pointToUpdate1);
                if (pointsToRemoveCount > 0)
                {
                    Series_Pa.Points.RemoveRange(0, pointsToRemoveCount);
                }
                SwiftPlotDiagram diagram = chartControl_Pa.Diagram as SwiftPlotDiagram;
                if (diagram != null)//&& diagram.AxisX.DateTimeMeasureUnit == DateTimeMeasurementUnit.Millisecond)
                                    //if (diagram != null && diagram.AxisX.MeasureUnit == DateTimeMeasureUnit.Millisecond)
                {
                    diagram.AxisX.VisualRange.SetMinMaxValues(minDate, argument);
                    //{ 2021 / 8 / 27 10:39:51}
                }
            }
            #endregion
        }
        count++;
    }

5.界面展示在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

muyiliu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值