博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
winform中的Json解析
阅读量:6331 次
发布时间:2019-06-22

本文共 4451 字,大约阅读时间需要 14 分钟。

http://whois.hichina.com/whois/api_whois?host=www.hao123.cn&oper=0这个网址会得到一个json数据

如下所示

{"exp_date":" 2015-03-17 12:48:36",

"name_server":"f1g1ns1.dnspod.net,f1g1ns2.dnspod.net",
"status":" ok",
"name":"hao123.cn",
"email":" suyouzhong@gmail.com",
"registrar":"厦门市中资源网络服务有限公司",
"reg_date":" 2003-03-17 12:20:05",
"total_infor":"Domain Name: hao123.cn\nROID: 20030311s10001s00039363-cn\nDomain Status: ok\nRegistrant ID: cnnic-zdmd-015\nRegistrant: 厦门中越网络科技有限公司\nRegistrant Contact Email: suyouzhong@gmail.com\nSponsoring Registrar: 厦门市中资源网络服务有限公司\nName Server: f1g1ns1.dnspod.net\nName Server: f1g1ns2.dnspod.net\nRegistration Date: 2003-03-17 12:20:05\nExpiration Date: 2015-03-17 12:48:36\nDNSSEC: unsigned\n"
,"Registrant_Organization":" 厦门中越网络科技有限公司"
}

我要把这个json数据显示到一个DataGridView,只显示域名、注册商、注册时间、到期时间,如下图所示

 

源码如下

public partial class frm_WhoIs : Form

{
public frm_WhoIs()
{
InitializeComponent();
}
private static frm_WhoIs a = null;

public static frm_WhoIs getForm()

{
if (a == null || a.IsDisposed == true)
{
a = new frm_WhoIs();
}
return a;

}

/// <summary>
/// 点击查询
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button1_Click(object sender, EventArgs e)
{
string par = IsVal();
if (par == null)
{
MessageBox.Show("请输入要查询的域名");
return;
}
if (par.Length == 0 || par == "")
{
MessageBox.Show("请输入要查询的域名");
return;
}
string url = "http://whois.hichina.com/whois/api_whois?host=" + par + "&oper=0";//所要获得内容的页面
var Url = url;
WebClient Client = new WebClient();
Client.Credentials = CredentialCache.DefaultCredentials;
byte[] PageData = Client.DownloadData(@Url);
string PageHtml = Encoding.Default.GetString(PageData);
DataTable dt = new DataTable();
if (!dt.Columns.Contains("name"))
{
dt.Columns.Add("name", typeof(string));
}
if (!dt.Columns.Contains("registrar"))
{
dt.Columns.Add("registrar", typeof(string));
}
if (!dt.Columns.Contains("creation"))
{
dt.Columns.Add("creation", typeof(DateTime));
}
if (!dt.Columns.Contains("expiration"))
{
dt.Columns.Add("expiration", typeof(DateTime));
}
DataRow dr = dt.NewRow();
WhoIsData whois = SerizaleTrackdalkDataTi(PageHtml);
try
{
string name = whois.name.ToString();
string reg = whois.registrar.ToString();
string create = whois.reg_date.ToString();
string exp = whois.exp_date.ToString();
dr[0] = name;
dr[1] = reg;
dr[2] = create;
dr[3] = exp;
}
catch (Exception)
{
dr[0] = txt_Whois.Text;
dr[1] = "无信息";
}
dt.Rows.Add(dr);
dgvlist.DataSource = dt;
dgvlist.AutoGenerateColumns = false;
}

/// <summary>

/// 验证输入的url
/// </summary>
/// <returns></returns>
private string IsVal()
{
string str = txt_Whois.Text.Trim();
if (str.IndexOf("www") == 0 && str.Length > 2)
{
str = str.Remove(str.IndexOf("www"), 3).Trim();
}
if (str.IndexOf("https") == 0 && str.Length > 4)
{
str = str.Remove(str.IndexOf("https"), 5).Trim();
}
if (str.IndexOf("http") == 0 && str.Length > 3)
{
str = str.Remove(str.IndexOf("http"), 4).Trim();
}
if (str.IndexOf("//") >= 0 && str.Length > 1)
{
str = str.Remove(str.IndexOf("//"), 2).Trim();
}
if (str.IndexOf(".") == 0 && str.Length > 0)
{
str = str.Remove((str.IndexOf(".")), 1).Trim();
}
if ((str.IndexOf("/") == 0 || str.IndexOf("/") == str.Length) && str.Length > 0)
{
str = str.Remove(str.IndexOf("/"), 1).Trim();
}
if(str.IndexOf("/")>0)
{
str = str.Remove(str.IndexOf("/"), str.Length - str.IndexOf("/"));
}
if (str.IndexOf(".") < 0)
{
return null;
}
if (str.IndexOf(":") >= 0)
{
str = str.Remove(str.IndexOf(":"), 1);
}
return str;
}

#region json对象的相关操作,这个类里面的属性必须和json中的一样,有大小写之分。
[DataContract]
public class WhoIsData
{
[DataMember(Order = 1)]
public string name { get; set; }//域名
[DataMember(Order = 2)]
public string registrar { get; set; }//注册商
[DataMember(Order = 3)]
public string reg_date { get; set; }//注册时间
[DataMember(Order = 4)]
public string exp_date { get; set; }//过期时间

public WhoIsData(string name, string regist, string reg, string exp)

{
this.name = name;
this.registrar = regist;
this.reg_date = reg;
this.exp_date = exp;
}
public WhoIsData() { }
}

public static WhoIsData SerizaleTrackdalkDataTi(string jsonString)

{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(WhoIsData));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
WhoIsData jsonObject = (WhoIsData)ser.ReadObject(ms);//将js序列化为对象
//ser.WriteObject(ms, jsonObject);这个是将对象序列化为json
ms.Close();
return jsonObject;
}
#endregion
}

转载于:https://www.cnblogs.com/liuqungs/archive/2013/05/23/3094995.html

你可能感兴趣的文章
Java面试笔试题大汇总一(最全+详细答案)
查看>>
10 个 Linux 中方便的 Bash 别名
查看>>
[Server] 服务器配置SSH登录邮件通知
查看>>
全新 DOCKER PALS 计划上线,带给您不一样的参会体验! ...
查看>>
Android开发之自定义View(二)
查看>>
python爬虫之微打赏(scrapy版)
查看>>
自制操作系统Antz day08——实现内核 (中) 扩展内核
查看>>
poj-1056-IMMEDIATE DECODABILITY(字典)
查看>>
阿里云容器Kubernetes监控(二) - 使用Grafana展现Pod监控数据
查看>>
区块链应用 | 不知道什么时候起,满世界都在谈区块链的事情
查看>>
小程序爆红 专家:对简单APP是巨大打击
查看>>
FarBox--另类有趣的网站服务【转】
查看>>
在非纯色背景上,叠加背景透明的BUTTON和STATIC_TEXT控件
查看>>
Distributed2:Linked Server Login 添加和删除
查看>>
海量数据处理相关面试问题
查看>>
Python-time
查看>>
Java中取两位小数
查看>>
RTX发送消息提醒实现以及注意事项
查看>>
使用 ftrace 调试 Linux 内核【转】
查看>>
唯一聚集索引上的唯一和非唯一非聚集索引
查看>>