判断json网址变化就刷新

diyhundan 2016-12-27 05:07:56
需求为:
网页 http://111.2.160.170:91/ngnscreenmgr/data/123.json会返回一个json 其中website字段记录着地址
做到website与网页不一样就刷新网页(注:不要wsdl 就是http获取json文件)



之前有道友帮忙总结了思路 具体分为四步
1.用timer控件每隔5s发送一个http请求到你的.json网址。
2.接收到返回的数据,可以用Json.NET反序列化成一个类。
3.通过对比[类.url]与之前的[url]是否一样。
4.如果不一样,则用你的webkit加载当前[类.url].

(刷新功能可以直接调用webKitBrowser1.Reload();)

然后我把我写的在这里贴出来 ,求大家看看哪里需要修改。
本人比较菜, 诸君详细点明思路即可,如有源码 更好!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
using System.Collections;
using System.Timers;
using System.Net;
using System.IO;
using System.Web;
using System.Xml.Linq;
using Newtonsofton;.Js
using System.Web.Script.Serialization;
using System.Timers;


namespace ngn
{
public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();

this.Load += Form1_Load;

//1 , 新建定时器 urlTimer

System.Timers.Timer urlTimer;

void Form1_Load(object sender, EventArgs e)
{



urlTimer = new System.Timers.Timer(4000);//定时周期4秒
urlTimer.Elapsed += urlTimer_Elapsed;//到4秒周期做的事件
urlTimer.AutoReset = true; //定时器不停刷



}

void urlTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//2, 完成的事件, 这里空白 不知如何下手
}

//内嵌 webkitBroser1

private void webKitBrowser1_Load(object sender, EventArgs e)
{

}



//使用Newtonsoftonjson反序列化

public static T GetStr<T>(string url)
{
string SerAadd = url;
XDocument doc;
HttpWebRequest request = WebRequest.Create(SerAadd) as HttpWebRequest;
try
{
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
StreamReader reader = new StreamReader(response.GetResponseStream());
string result = reader.ReadToEnd();
return SerializeKit.JsonDeserialize<T>(result);
}

}
catch (Exception e)
{
}
return default(T);
}


}

public static class SerializeKit
{
#region JsonSerialize

/// <summary>
///
/// </summary>
/// <param name="object"></param>
/// <returns></returns>
public static string JsonSerialize(object @object)
{
try
{
var serializer = new JavaScriptSerializer();
return serializer.Serialize(@object);
}
catch
{
return null;
}
}

#endregion

#region JsonDeserialize
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="jsonString"></param>
/// <returns></returns>
public static T JsonDeserialize<T>(string jsonString)
{
try
{
var serializer = new JavaScriptSerializer();
return serializer.Deserialize<T>(jsonString);
}
catch
{
return default(T);
}
}
#endregion

}

public class ItemTypeMassageEntity
{
[JsonProperty("id")]
public int ID { get; set; }


[JsonProperty("screen_number")]
public string Screen_number { get; set; }

[JsonProperty("screen_resolution")]
public string Screen_resolution { get; set; }
[JsonProperty("IP")]
public string ip { get; set; }

[JsonProperty("port")]
public string Port { get; set; }

[JsonProperty("website")]
public string Website { get; set; }

}


}


3 、 对比我也没写 开始迷了 有人可以帮忙补足 一下或者是相信讲讲吗?
...全文
211 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
拜一刀 2017-04-13
  • 打赏
  • 举报
回复
用js写算了,把你要展示的网页写iframe里
by_封爱 版主 2017-04-13
  • 打赏
  • 举报
回复
伪代码如下.

public static string lastString="";
void main (string args [])
{
 var timer=new timer(5000);
 timer.exap+=aaaaa
 timer.start();
}
void aaaaa(ob,, ev...)
{
   var rs=new webclient.downloadstring("http://....sda.d.sads.ad../aswq3/21/oi.json");
  if laststring==""
   laststring=rs;
  var class=JsonDeserialize<你的类>(laststring);
  //你处理的代码.
}
其实我想了下..你所谓的判断 根本没什么用啊.. 反正你都5秒一请求了 直接用最新数据就好了 这个判断还有什么用呢? 所以上面的代码 就更简单了.

   var rs=new webclient.downloadstring("http://....sda.d.sads.ad../aswq3/21/oi.json");
   var class=JsonDeserialize<你的类>(rs);
   //你的逻辑处理....
而且返回一堆字符串而已.为什么还用webkit.net?是吧....
yunqing1201 2017-04-13
  • 打赏
  • 举报
回复
你朋友说的是对的, 1、你代码首先要建个数据对象,就是序列化后的数据对象。 2、在timer事件中 发送get请求,收到结果后进行反序列化。 3、判断后,根据判断结果做对应的事!

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧