C# WPF框架从http协议上获取返回的json数据及其解析json数据
2021/10/15 11:14:30
本文主要是介绍C# WPF框架从http协议上获取返回的json数据及其解析json数据,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
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#中的实体类,用于存放数据。
通常有两种方案:
- 自己手写实体类。
- 利用网站进行直接转换或者直接百度搜索: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数据的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#