C#从网址上读取json数据

需求:从客户给的网址中读取json格式的数据。

找了好多资料,都不太好使,看到了一篇很有帮助的文章。以下大部分内容和这篇找到的文章近似。太不容易了,同时也感谢这篇文章的作者心所欲。

https://www.cnblogs.com/zoujinhua/p/10330066.html

下面总结一下。

在实际开发中,我们经常会使用到API,所谓API一般就是一个地址,我们称之为接口。

然后我们通过c#对这地址发送请求,请求后,服务器就会给我们返回数据,一般是XML或Json格式,这里我们主要讲述的是Json。

这里我们有一个网址:http://cfwincad.cfsuper.com/api/project/opt_1D_InfoDetail?TenantId=14984910843973&ID=923

直接在浏览器上访问这个地址,可以正常访问,可以看到json格式的数据。

接下来就是大家最喜欢的代码环节,这里用的winform程序,我们建立了一个窗体程序。点击后,显示Json数据就可以,界面如下:

建好窗体,这里放了一个读取Json的按钮,因为字符较多,一般的文本框TextBox显示不全,这里我在工具箱里拖拽了一个richTextBox1来显示Json数据。

然后我们来创建一个类,右键项目名称--添加--类。这里我的类名为Http.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace c_解析json2
{public class Http{//这个类有两个方法,一个是Get,一个是Post,这里只需Getpublic 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 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;}}}

这个类有两个方法,一个是Get,一个是Post,这里只需要用到Get。

然后是点击按钮读取Json的方法

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Newtonsoft.Json; // 引入这个库
using System.Net.Http;
using System.Runtime.InteropServices;
using System.Drawing.Text;
using System.Net;
using System.IO;
using System.Collections;
using Newtonsoft.Json.Linq;
using static System.Net.WebRequestMethods;namespace c_解析json2
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){// 使用JsonConvert方法,DeserializeObject 反序列化// 为接收到的json数据// textBox1.Text为接收到的json数据// 反序列化,是由json转为实体类// 这个需要引入Newtonsoft.Json这个DLL并using// 传入我们的实体类还有需要解析的JSON字符串就可以了。然后// 可以通过实体类使用数据了。WorkItem cc = JsonConvert.DeserializeObject<WorkItem>(richTextBox1.Text);//这样就可以读取JSON数据里面的值//textBox1.Text = cc.profiLav;MessageBox.Show("profiLav=" + cc.positionX);//for (int i = 0; i < cc.Count; i++)//{//    MessageBox.Show("name =" + cc.work[i].name + "\r\n" + cc.work[i].profiLav + "\r\n" + cc.work[i].positionX + "\r\n" + cc.work[i].positionY);//}}// 使用HttpClient类来发送HTTP请求并读取Getman网址中的json数据。// 读取Jsonprivate void button2_Click(object sender, EventArgs e){//我们的接口string url = "http://cfwincad.cfsuper.com/api/project/opt_1D_InfoDetail?TenantId=14984910843973&ID=923";//将接口传入,这个HttpUitls的类,有兴趣可以研究下,也可以直接用就可以,不用管如何实现。string getJson = Http.Get(url);richTextBox1.Text = getJson;}private void Form1_Load(object sender, EventArgs e){}}
}

点击出现Json数据如下,成功了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/652925.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字图像处理(实践篇)三十四 OpenCV-Python绘制椭圆

目录 一 涉及的函数 二 实践 一 涉及的函数 cv2.ellipse(img,center,axes,angle,start_angle,end_angle,color,thickness) 参数: ①<

Future模式先给您提货单

Future模式是一种设计模式&#xff0c;用于在处理耗时操作时提高程序的响应性。 角色介绍: Main类: 负责向Host发出请求并获取数据的类。 Host类: 负责向请求返回FutureData的实例的类&#xff0c;起到调度的作用。 Data接口: 表示访问数据的方法的接口&#xff0c;由FutureD…

openGauss学习笔记-209 openGauss 数据库运维-常见故障定位案例-共享内存泄露问题

文章目录 openGauss学习笔记-209 openGauss 数据库运维-常见故障定位案例-共享内存泄露问题209.1 共享内存泄露问题209.1.1 问题现象209.1.2 原因分析209.1.3 处理方法 openGauss学习笔记-209 openGauss 数据库运维-常见故障定位案例-共享内存泄露问题 209.1 共享内存泄露问题…

算法沉淀——滑动窗口(leetcode真题剖析)

算法沉淀——滑动窗口 01.长度最小的子数组02.无重复字符的最长子串03.最大连续1的个数 III04.将 x 减到 0 的最小操作数05.水果成篮06.找到字符串中所有字母异位词07.串联所有单词的子串08.最小覆盖子串 滑动窗口算法是一种用于解决数组或列表中子数组或子序列问题的有效技巧。…

重装Windows系统出现Windows无法安装到这个磁盘,选中的磁盘采用GPT分区

文章目录 1.问题描述2.问题解决 1.问题描述 重装Windows系统时&#xff0c;出现Windows无法安装到这个磁盘&#xff0c;选中的磁盘采用GPT分区这个提示 2.问题解决 1.shiftF10&#xff0c;打开命令行 2.输入&#xff1a;diskpart (打开分区工具) 3.输入&#xff1a;list di…

elementplus Dialog 对话框设置距离页面顶部的距离

默认为 15vh&#xff0c;当弹窗过于高的时候&#xff0c;这个距离其实是不合适的 <el-dialogv-model"dialogVisible"title"Tips"width"30%":before-close"handleClose"top"6vh"><span>This is a message</s…

IDEA搭建JDK源码学习环境(可添加注释、修改、debug)

工程详见&#xff1a;https://github.com/wenpanwenpan/study-source-jdk1.8.0_281 1、找到src.zip和javafx-src.zip 找到你想要调试的JDK&#xff0c;笔者本地电脑上装了两个版本的JDK&#xff0c;这里以jdk1.8.0_281为例将JDK目录下的javafx-src.zip和src.zip两个压缩包进行…

详解SpringCloud微服务技术栈:ElasticSearch实践2——RestClient查询并处理文档

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;详解SpringCloud微服务技术栈&#xff1a;ElasticSearch搜索结果处理&#xff08;排序、分页、高亮&#xff09; &#x1f4da;订…

VMware 虚拟机环境下的ubuntu 上安装mysql,并能远程访问数据库

需求&#xff1a;为了实现在linux上模拟服务器跑代码&#xff0c;并存储在mysql上&#xff0c;通过远程可视化mysql数据库软件查看linux上mysql数据库数据的实时动态。 1. 虚拟机和ubuntu的安装 这里我选择的是VMware workstation-v14, ubuntu-18.04.1。至于体流程网上很多&a…

vite项目配置本地开发使用https访问,3分钟搞定

在开发过程中&#xff0c;有时候需要用到一些音视频接口等需要https才能拿到权限&#xff0c;为方便开发过程中调试&#xff0c;这里就介绍几种vite项目快速开启https访问的方式。vite配置项说明文档&#xff1a;开发服务器选项 | Vite 官方中文文档 第一种&#xff1a;使用插件…

SpringBoot引入 liteflow 规则引擎,yyds!

1前言 在日常的开发过程中&#xff0c;经常会遇到一些串行或者并行的业务流程问题&#xff0c;而业务之间不必存在相关性。 在这样的场景下&#xff0c;使用策略和模板模式的结合可以很好的解决这个问题&#xff0c;但是使用编码的方式会使得文件太多,在业务的部分环节可以这…

python基础3

7.5 range range 可以生成数字供 for 循环遍历 , 它可以传递三个参数&#xff0c;分别表示 起始、结束和步长。 8. 数据类型高级 8.1 字符串高级 字符串的常见操作包括&#xff1a; 获取长度 :len len 函数可以获取字符串的长度。 查找内容 :find 查找指定内容在字符…

java—AWT

AWT 课程&#xff1a;1、GUI编程简介_哔哩哔哩_bilibili 一.介绍 包含了很多类和接口&#xff01;GUI&#xff01;元素&#xff1a;窗口、按钮、文本框java.awt 二.窗口 1.构造 2.方法 // 实例化frame类Frame frame new Frame("这个一个框");// 设置可见性frame.…

Metaphor(EXA) 基于大语言模型的搜索引擎

文章目录 关于 Metaphor使用示例 关于 Metaphor Metaphor是基于大语言模型的搜索引擎&#xff0c;允许用户使用完整的句子和自然语言搜索&#xff0c;还可以模拟人们在互联网上分享和谈论链接的方式进行查询内容。 Metaphor同时还能与LLMs结合使用&#xff0c;允许LLMs连接互联…

编曲学习:和声音程 调式体系 唱名法 调式调性

34届和声音程 调式体系 唱名法 调式调性https://app8epdhy0u9502.pc.xiaoe-tech.com/live_pc/l_65af994be4b064a8cb1c3a5f?course_idcourse_2XLKtQnQx9GrQHac7OPmHD9tqbv 34届独立音乐人编曲训练营https://app8epdhy0u9502.pc.xiaoe-tech.com/p/t_pc/course_pc_detail/camp_p…

鸿蒙开发-UI-组件

鸿蒙开发-UI-布局 鸿蒙开发-UI-布局-线性布局 鸿蒙开发-UI-布局-层叠布局 鸿蒙开发-UI-布局-弹性布局 鸿蒙开发-UI-布局-相对布局 鸿蒙开发-UI-布局-格栅布局 鸿蒙开发-UI-布局-列表 ​​​​​​鸿蒙开发-UI-布局-网格 鸿蒙开发-UI-布局-轮播 文章目录 前言 一、按钮 1.创建…

深度强化学习(王树森)笔记04

深度强化学习&#xff08;DRL&#xff09; 本文是学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接&#xff1a;https://github.com/wangshusen/DRL 源代码链接&#xff1a;https://github.c…

论文精读--BERT

不像视觉领域&#xff0c;在Bert出现之前的nlp领域还没有一个深的网络&#xff0c;使得能在大数据集上训练一个深的神经网络&#xff0c;并应用到很多nlp的任务上 Abstract We introduce a new language representation model called BERT, which stands for Bidirectional En…

范仲淹大直男逆袭,先天下之忧而忧

人在最艰苦时&#xff0c;最能体现英雄本色。 天底下最苦的是读书。读书要眼到、手到、心到&#xff0c;专心致志&#xff0c;灵活运用。 范仲淹读书很用功&#xff0c;每天煮一锅粥。等到第二天&#xff0c;粥凝固了&#xff0c;范仲淹把隔夜粥划为四块&#xff0c;早上吃两块…

【C语言】编译和链接

目录 &#xff08;一&#xff09;编译 &#xff08;1&#xff09;预处理&#xff08;预编译&#xff09; &#xff08;2&#xff09;编译 i.词法分析 ii.语法分析 iii.语义分析 (3)汇编 &#xff08;二&#xff09;链接 重定位 正文开始 &#xff08;一&#xff09;编译…