C# WPF框架从http协议上获取返回的json数据及其解析json数据

【大部分知识来源地,点击跳转】

在实际开发中,我们经常会使用到API,所谓API就是一个地址,我们称之为接口。然后我们通过使用C#对这个接口发送请求,服务器会接收我们的请求并返回数据,一般是XML或者json格式。

1.json数据格式

在接下来的实例中我将使用本地服务器进行演示。
接口:http://172.16.40.118:8666/getSInfraredData?dataTime=起始时间

TIPS:起始时间就是获取起始时间之后的数据信息。

格式如下:

2.获取返回的json数据

以下示例不对xmal界面进行过多的描述。新建login.xaml及其login.xaml.cs,仅用于演示。

login.xaml.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Net;//http接口命名空间
using System.IO;//输入输出流命名空间namespace SmartShoppingSystem
{/// <summary>/// login.xaml 的交互逻辑/// </summary>/// public partial class login : Window{public login(){InitializeComponent();WindowStartupLocation = WindowStartupLocation.CenterScreen;}private static String Api = "http://172.16.40.118:8666/getSInfraredData";//封装的get方法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;}private void Login(object sender, RoutedEventArgs e){string getData = Get(Api + "?dataTime=11:");MessageBox.Show(getData)}}
}

以下是post方法,可借鉴。

     //封装的post方法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;}

3.解析json数据(反序列化)

json数据字符串如下:

{"code":0,"result":[{"SInfraredId":1,"s1":1,"s2":1,"infrared1":15,"infrared2":18,"dataTime":"12:50:06"},{"SInfraredId":2,"s1":0,"s2":1,"infrared1":22,"infrared2":8,"dataTime":"11:02:47"},{"SInfraredId":3,"s1":1,"s2":0,"infrared1":2,"infrared2":58,"dataTime":"11:03:16"},{"SInfraredId":4,"s1":0,"s2":0,"infrared1":28,"infrared2":48,"dataTime":"11:03:39"},{"SInfraredId":5,"s1":1,"s2":1,"infrared1":8,"infrared2":8,"dataTime":"11:03:55"},{"SInfraredId":6,"s1":1,"s2":1,"infrared1":12,"infrared2":12,"dataTime":"12:58:42"}]}

1.首先我们需要将该字符串转化为一个C#中的实体类,用于存放数据。

通常有两种方案:

  1. 自己手写实体类。
  2. 利用网站进行直接转换或者直接百度搜索:JSON转C#实体类。
    可以使用以下网站:http://www.bejson.com/convert/json2csharp/
public class ResultItem
{/// <summary>/// /// </summary>public int SInfraredId { get; set; }/// <summary>/// /// </summary>public int s1 { get; set; }/// <summary>/// /// </summary>public int s2 { get; set; }/// <summary>/// /// </summary>public int infrared1 { get; set; }/// <summary>/// /// </summary>public int infrared2 { get; set; }/// <summary>/// /// </summary>public string dataTime { get; set; }
}public class Root
{/// <summary>/// /// </summary>public int code { get; set; }/// <summary>/// /// </summary>public List <ResultItem > result { get; set; }
}

2.引入Newtonsoft.Json.DLL文件

可以直接去该dll文件官方网站搜索:https://www.newtonsoft.com/json
或者直接使用博主提供的dll文件。链接:【点击跳转】

3.完整实例代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Net;//http接口命名空间
using System.IO;//输入输出流命名空间
using Newtonsoft.Json;//引入json解析命名空间namespace SmartShoppingSystem
{/// <summary>/// login.xaml 的交互逻辑/// </summary>/// public partial class login : Window{public login(){InitializeComponent();WindowStartupLocation = WindowStartupLocation.CenterScreen;}private static String Api = "http://172.16.40.118:8666/getSInfraredData";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 class ResultItem{public int SInfraredId { get; set; }public int s1 { get; set; }public int s2 { get; set; }public int infrared1 { get; set; }public int infrared2 { get; set; }public string dataTime { get; set; }}public class Root{public int code { get; set; }public List <ResultItem > result { get; set; }}private void Login(object sender, RoutedEventArgs e){string getData = Get(Api + "?dataTime=11:");//解析json数据包//传入实体类,解析json字符串。Root rt = JsonConvert.DeserializeObject<Root>(getData);MessageBox.Show(rt.code);//由于这个JSON字符串的 public List<ResultItem > result 是一个集合,所以我们需要遍历集合里面的所有数据for (int i = 0; i < rt.result.Count; i++){MessageBox.Show("Data=" + rt.result[i].SInfraredId+ "\r\n" + rt.result[i].s1+ "\r\n" + rt.result[i].infrared1+ "\r\n" + rt.result[i].dataTime);}}}
}

C# WPF框架从http协议上获取返回的json数据及其解析json数据相关推荐

  1. TP5框架的多图片上传返回不显示问题

    TP5框架的多图片上传返回不显示问题 今天在写接口的时候遇到了一个问题,就是前端多张图片上传,图片路径以 ' | '进行的拼接然后存储, 大概就是这个样子在jpg后面进行的一个 ' | ' 进行分割 ...

  2. Python 获取接口数据,解析JSON,写入文件

    Python 获取接口数据,解析JSON,写入文件 用于练手的例子,从国家气象局接口上获取JSON数据,将它写入文件中,并解析JSON: 总的来说,在代码量上,python代码量要比java少很多.而 ...

  3. Python获取丁香园疫情数据并解析json数据

    Python获取丁香园疫情数据并解析json数据 在利用pyecharts V1.x版本,使用Map对象进行制图时,对数据格式的要求比较高,如果数据格式不正确可能达不到我们预期的效果.在我的前一篇文章 ...

  4. VBA实现企业微信API获取考勤数据,解析JSON数据格式。

    '通过微信API接口发送和获取数据 Function weixinAPI(starttime As String, endtime As String) As StringDim access_tok ...

  5. js解析json js获取json里面的某个节点的数据 js解析json数据

    获取data里面的节点 $.ajax({type: "GET",url: '../api/数据接口.aspx',dataType: 'json',success: function ...

  6. Http协议(下载笑话网页,Get方式解析json)

    自定义adapter: public class MyAdapter extends BaseAdapter {private Context context;private List<Joke ...

  7. java中的数据解析是_Java从网络中请求获取JSon数据以及解析JSON数据----(自创,请注明)...

    Json数据是比较常用的数据类型解析,优点就不多说啦.来看看方法: public static JSONObject getJsonObject(String url) { JSONObject js ...

  8. 利用百度APIStoreSDK获取Json数据并解析加载到ListView上

    效果图(这里只是截取了List中的一项): 一.:登录百度ApiStore,获取移动sdk Android版(同时有使用文档和示例),将jar包导入到项目中 Android Studio请在放入lib ...

  9. c#网络通信框架networkcomms内核解析之七 数据包创建器(PacketBuilder)

    本文基于networkcomms2.3.1开源版本  gplv3协议 PacketBuilder 数据包创建器,用于辅助创建数据包. 程序把Tcp连接上收到的二进制数据暂时存储在 packetBuil ...

  10. takephoto 框架_GitHub - Smecking/TakePhoto: 一款用于在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库...

    TakePhoto是一款用于在Android设备上获取照片(拍照或从相册.文件中选择).裁剪图片.压缩图片的开源工具库,目前最新版本4.0.2. 3.0以下版本及API说明,详见TakePhoto2. ...

最新文章

  1. 比尔·盖茨:我对投资比特币没有兴趣
  2. 强交变磁场下的AD转换数值的变化
  3. python中list是什么意思_python中list和list [:]有什么区别?
  4. numpy、cv2等操作图片基本操作
  5. mapper 判断条件为null
  6. 大数据架构的典型方法和方式
  7. leetcode刷题:
  8. 【Android界面实现】Drawable Animation 使用介绍
  9. Logback的配置说明
  10. linux fdisk的分区和格式化和挂载相关操作说明
  11. android 学习随笔二十三(动画:Fragment )
  12. 【Codeforces 404C】Restore Graph
  13. Latex 公式速查
  14. 远程迅雷linux,Ubuntu 14.04安装迅雷Xware过程笔记
  15. jaxen-1.1-beta-6.jar下载地址
  16. 更多 ViewBinding 的封装思路
  17. 愿所有我和码农们 printf(“前程似锦”)
  18. 3、基于竞速小车 实现 华为hi lens红绿灯识别操作
  19. word导航栏 字体大小修改
  20. 【GPS授时系列】一,写在正式开始前

热门文章

  1. 一心想斩获算法岗,却碰上最难求职季
  2. 数据科学包11-数据可视化
  3. 脚本语言、编程语言区别与联系
  4. python基础快速入门day01
  5. 初始化游戏状态数据二
  6. 十分钟完成的操作系统编写 你信吗?
  7. 二十一天学通VC++之创建工作者线程
  8. Hadoop-RPC底层实现与解析
  9. Docker教程:使用docker配置python开发环境
  10. PyQt5教程 - QtDesigner窗口设计工具的使用