HTTP模拟工具【C#/Winform源码】、Json绑定TreeView控件、使用了MetroModernUI、RestSharp、Dapper.Net、Newtonsoft.Json、SmartThreadPool这几个主要开源框架
HTTP模拟工具
开发语言:C#/Winform
开发工具:Visual Studio 2017
数据库: SQLite
使用框架:界面-MetroModernUI
Http请求-RestSharp
ORM-Dapper.Net
Json解析-Newtonsoft.Json
多线程-SmartThreadPool
本来打算试一下Dapper.Net扩展框架-DapperExtensions,用了有点问题,不知什么原因后来弃用了,用回原生的Dapper.Net。
相关程序包被我删了,NuGet管理器自行还原。
项目地址:在文章最底部
来!上图!!
Get请求方式

Post请求方式
Http请求的核心代码
/// <summary>
/// 请求
/// </summary>
/// <param name="url"></param>
/// <param name="jsonData"></param>
/// <param name="methodType"></param>
/// <returns></returns>
private string RequestData(string url, Dictionary<string, string> headerData, string jsonData, Method methodType)
{
string urlHead = "";
string urlTail = "";
)
{
urlHead = "http://";
urlTail = url.Substring("http://".Length);
}
)
{
urlHead = "https://";
urlTail = url.Substring("https://".Length);
}
else
{
urlHead = "http://";
urlTail = url;
}
]);
]) + urlTail.Split(].Length + ), methodType);
if (methodType == Method.POST)
request.AddParameter("application/json;charset=utf-8", jsonData, ParameterType.RequestBody);
foreach (var item in headerData)
{
request.AddHeader(item.Key, item.Value);
}
// execute the request
IRestResponse response = client.Execute(request);
var content = response.Content; // raw content as string
return content.ToString();
}
Json数据绑定TreeView控件核心代码
/// <summary>
/// 绑定树形控件
/// </summary>
/// <param name="treeView"></param>
/// <param name="strJson"></param>
private void BindTreeView(TreeView treeView, string strJson)
{
treeView.Nodes.Clear();
//string strJson = "1";//抛异常
//string strJson = "{}";
//string strJson = "{\"errcode\":0,\"errmsg\":\"查询成功\",\"datas\":[{\"c_ResourceType\":\"BootLogo\",\"c_Url\":\"/Upload/Magazine/4e09315d-7d92-4e6a-984d-80f684a24da8.jpg\"}]}";
//string strJson = "[{\"DeviceCode\":\"430BE-B3C6A-4E953-9F972-FC741\",\"RoomNum\":\"777\"},{\"DeviceCode\":\"BF79F -09807-EEA31-2499E-31A98\",\"RoomNum\":\"888\"}]";
if (IsJOjbect(strJson))
{
JObject jo = (JObject)JsonConvert.DeserializeObject(strJson);
foreach (var item in jo)
{
TreeNode tree;
if (item.Value.GetType() == typeof(JObject))
{
tree = new TreeNode(item.Key);
AddTreeChildNode(ref tree, item.Value.ToString());
treeView.Nodes.Add(tree);
}
else if (item.Value.GetType() == typeof(JArray))
{
tree = new TreeNode(item.Key);
AddTreeChildNode(ref tree, item.Value.ToString());
treeView.Nodes.Add(tree);
}
else
{
tree = new TreeNode(item.Key + ":" + item.Value.ToString());
treeView.Nodes.Add(tree);
}
}
}
if (IsJArray(strJson))
{
JArray ja = (JArray)JsonConvert.DeserializeObject(strJson);
;
foreach (JObject item in ja)
{
TreeNode tree = new TreeNode("Array [" + (i++) + "]");
foreach (var itemOb in item)
{
TreeNode treeOb;
if (itemOb.Value.GetType() == typeof(JObject))
{
treeOb = new TreeNode(itemOb.Key);
AddTreeChildNode(ref treeOb, itemOb.Value.ToString());
tree.Nodes.Add(treeOb);
}
else if (itemOb.Value.GetType() == typeof(JArray))
{
treeOb = new TreeNode(itemOb.Key);
AddTreeChildNode(ref treeOb, itemOb.Value.ToString());
tree.Nodes.Add(treeOb);
}
else
{
treeOb = new TreeNode(itemOb.Key + ":" + itemOb.Value.ToString());
tree.Nodes.Add(treeOb);
}
}
treeView.Nodes.Add(tree);
}
}
treeView.ExpandAll();
}
/// <summary>
/// 添加子节点
/// </summary>
/// <param name="parantNode"></param>
/// <param name="value"></param>
public void AddTreeChildNode(ref TreeNode parantNode, string value)
{
if (IsJOjbect(value))
{
JObject jo = (JObject)JsonConvert.DeserializeObject(value);
foreach (var item in jo)
{
TreeNode tree;
if (item.Value.GetType() == typeof(JObject))
{
tree = new TreeNode(item.Key);
AddTreeChildNode(ref tree, item.Value.ToString());
parantNode.Nodes.Add(tree);
}
else if (item.Value.GetType() == typeof(JArray))
{
tree = new TreeNode(item.Key);
AddTreeChildNode(ref tree, item.Value.ToString());
parantNode.Nodes.Add(tree);
}
else
{
tree = new TreeNode(item.Key + ":" + item.Value.ToString());
parantNode.Nodes.Add(tree);
}
}
}
if (IsJArray(value))
{
JArray ja = (JArray)JsonConvert.DeserializeObject(value);
;
foreach (JObject item in ja)
{
TreeNode tree = new TreeNode("Array [" + (i++) + "]");
parantNode.Nodes.Add(tree);
foreach (var itemOb in item)
{
TreeNode treeOb;
if (itemOb.Value.GetType() == typeof(JObject))
{
treeOb = new TreeNode(itemOb.Key);
AddTreeChildNode(ref treeOb, itemOb.Value.ToString());
tree.Nodes.Add(treeOb);
}
else if (itemOb.Value.GetType() == typeof(JArray))
{
treeOb = new TreeNode(itemOb.Key);
AddTreeChildNode(ref treeOb, itemOb.Value.ToString());
tree.Nodes.Add(treeOb);
}
else
{
treeOb = new TreeNode(itemOb.Key + ":" + itemOb.Value.ToString());
tree.Nodes.Add(treeOb);
}
}
}
}
}
/// <summary>
/// 判断是否JOjbect类型
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
private bool IsJOjbect(string value)
{
try
{
JObject ja = JObject.Parse(value);
return true;
}
catch (Exception ex)
{
return false;
}
}
/// <summary>
/// 判断是否JArray类型
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
private bool IsJArray(string value)
{
try
{
JArray ja = JArray.Parse(value);
return true;
}
catch (Exception ex)
{
return false;
}
}
HTTP模拟工具【C#/Winform源码】、Json绑定TreeView控件、使用了MetroModernUI、RestSharp、Dapper.Net、Newtonsoft.Json、SmartThreadPool这几个主要开源框架的更多相关文章
- 实例源码--Android的ListView控件的总结
下载源码 技术要点: 1.ListView控件的总结 2.微信ListView气泡的实现 3.ListView仿优酷播放列表 4.ListView刷新列表 5.详细的源码注释 ...... 详细介 ...
- UiAutomator源码分析之获取控件信息
根据上一篇文章<UiAutomator源码分析之注入事件>开始时提到的计划,这一篇文章我们要分析的是第二点: 如何获取控件信息 我们在测试脚本中初始化一个UiObject的时候通常是像以下 ...
- JGUI源码:实现日期控件显示(17)
本文实现一个日期控件显示,日期控件看起来很复杂,其实原理很简单,大部分情况下我们直接使用别人做得好的日期控件就行,但有时候特殊需求,比如显示提醒之类的,恐怕第三方控件就不好实现了, 为了使程序逻辑看起 ...
- 驾照理论模拟考试系统Android源码下载
驾照理论模拟考试系统Android源码下载 <ignore_js_op> 9.png (55.77 KB, 下载次数: 0) <ignore_js_op> 10.png ...
- IPerf——网络测试工具介绍与源码解析(4)
上篇随笔讲到了TCP模式下的客户端,接下来会讲一下TCP模式普通场景下的服务端,说普通场景则是暂时不考虑双向测试的可能,毕竟了解一项东西还是先从简单的情况下入手会快些. 对于服务端,并不是我们认为的直 ...
- XJar: Spring-Boot JAR 包加/解密工具,避免源码泄露以及反编译
XJar: Spring-Boot JAR 包加/解密工具,避免源码泄露以及反编译 <?xml version="1.0" encoding="UTF-8" ...
- Java并发工具类CountDownLatch源码中的例子
Java并发工具类CountDownLatch源码中的例子 实例一 原文描述 /** * <p><b>Sample usage:</b> Here is a pai ...
- Winform中怎样在工具类中对窗体中多个控件进行操作(赋值)
场景 需求是在窗体加载完成后掉用工具类的方法,工具类中获取窗体的多个控件对象进行赋值. 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 ...
- [WinForm]WinForm跨线程UI操作常用控件类大全
前言 在C#开发的WinForm窗体程序开发的时候,经常会使用多线程处理一些比较耗时之类的操作.不过会有一个问题:就是涉及到跨线程操作UI元素. 相信才开始接触的人一定会遇上这个问题. 为了解决这个问 ...
随机推荐
- Embedding R-generated Interactive HTML pages in MS PowerPoint(转)
Usually when I create slide decks these days I used markdown and slidy. However, I recently was ask ...
- log4j之log4j2.xml使用
依赖jar包 log4j-api-2.6.2.jar log4j-core-2.6.2.jar log4j-slf4j-impl-2.6.2.jar slf4j-api-1.7.12.jar 在res ...
- Java对于内存的需要知道的知识
内存 内存大家都知道(当然不是硬盘啊).与c.c++相比呢,Java在内存管理的方面一个优越之处就是我们不用显式的去对对象进行内存的分配和内存的回收,可能有人会着迷于对内存使用分配的这种快感,但是随着 ...
- MySql数据库基础操作——数据库、用户的创建,表的制作、修改等
MySql 是一款使用便捷.轻量级的数据库.因为他体积小.速度快.安装使用简单.开源等优点,目前是使用最广泛的数据库.目前位于Oracle甲骨文公司旗下.那今天我们就来介绍一下数据库的基本操作.具体介 ...
- 宿主机共享文件夹给不同Linux虚拟机的方法
一.Windows/Linux宿主机共享文件夹给VMWare中的Linux虚拟机 1.能安装vmware tools1)在vmware的ubuntu中安装vmware tools2)在vmware中开 ...
- PO/VO/POJO/BO/VO图解
- 通过LOGBACK实现每个类、包或自定义级别
项实现LOGBACK对每个包或者类或者通过自定义级别的方式实现自定义输出的日志进入制定的文件.查阅了很多资料,都没有找到行之有效的解决方案,直到看到了这篇文章http://www.360doc.com ...
- Overfitting&Underfitting Problems
这次根据结合Google的翻译果然速度快上许多,暂时休息,晚上在传一个exm2的随笔. 关于过度拟合下的问题 考虑从x∈R预测y的问题,下面的最左边的图显示了将\(y=\theta_0+\theta_ ...
- 两本最近阅读的工具书的记录 关于Python和Linux命令行的 不喜勿喷 只是写给自己用
<Linux命令行完全技术宝典>读书心得 张栋作者 在学习Linux系统中,我们需要掌握各种管理的方法和技巧,而管理Linux系统最有效的方法就是命令行的控制.而我在图书馆中读到的< ...
- Google云平台技术架构
Google Cloud 设计原理: 1.分布式文件系统: Google Distributed File System(GSF) 为了满足Google迅速增长的数据处理需求,我们设计并实现了G ...