日期:2014-06-10 浏览次数:20665 次
/// <summary> /// http://www.weather.com.cn/data/sk/101280601.html /// {"weatherinfo":{"city":"深圳","cityid":"101280601","temp":"32","WD":"西南风","WS":"4级","SD":"68%","WSE":"4","time":"16:40","isRadar":"1","Radar":"JC_RADAR_AZ9755_JB"}} /// 20140531 涂聚文 Geovin Du /// </summary> public class WeatherInfo { //public string city; //public string cityid; //public string temp; //public string WD; //public string WS; //public string SD; //public string WSE; //public string time; //public string isRadar; //public string Radar; string _city; string _cityid; string _temp; string _WD; string _WS; string _SD; string _WSE; string _time; string _isRadar; string _Radar; /// <summary> /// 城市名称 /// </summary> public string city { get { return _city; } set { _city = value; } } /// <summary> /// 城市代码 /// </summary> public string cityid { get { return _cityid; } set { _cityid = value; } //get; //set; } /// <summary> /// 温度 /// </summary> public string temp { get { return _temp; } set { _temp = value; } } /// <summary> /// 风向 /// </summary> public string WD { get { return _WD; } set { _WD = value; } } /// <summary> /// 风级 /// </summary> public string WS { get { return _WS; } set { _WS = value; } } /// <summary> /// 湿度 /// </summary> public string SD { get { return _SD; } set { _SD = value; } } /// <summary> /// /// </summary> public string WSE { get { return _WSE; } set { _WSE = value; } } /// <summary> /// 发布时间 /// </summary> public string time { get { return _time; } set { _time = value; } } /// <summary> /// /// </summary> public string isRadar { get { return _isRadar; } set { _isRadar = value; } } /// <summary> /// /// </summary> public string Radar { get { return _Radar; } set { _Radar = value; } } private Dictionary<string, object> _theRest = new Dictionary<string, object>(); public Dictionary<string, object> TheRest { get { return _theRest; } } // public Dictionary<string, decimal> Rates { get; set; } }
/// <summary> /// http://www.weather.com.cn/data/sk/101280601.html /// 20140531 涂聚文 Geovin Du /// </summary> public class WeatherInfoConverter : CustomCreationConverter<WeatherInfo> { public override WeatherInfo Create(Type objectType) { return new WeatherInfo(); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { WeatherInfo mappedObj = new WeatherInfo(); //get an array of the object's props so I can check if the JSON prop s/b mapped to it PropertyInfo[] myPropertyInfo; myPropertyInfo = objectType.GetProperties(); string objProps = string.Empty; //for (int i = 0; i < myPropertyInfo.Length; i++) //{ // objProps = objProps +" "+ myPropertyInfo[i].ToString(); //} foreach (PropertyInfo pi in objectType.GetProperties()) { object value1 = pi.GetValue(mappedObj, null);//用pi.GetValue获得值 objProps = objProps + " " + pi.Name;//获得属性的名字,后面就可以根据名字判断来进行些自己想要的操作 //获得属性的类型,进行判断然后进行以后的操作,例如判断获得的属性是整数 //if(value1.GetType() == typeof(int)) //{ // //进行你想要的操作 //} } //objProps = myPropertyInfo[0].Name.ToLower().ToString(); //objectType.GetProperties().Select(p => p.Name.ToLower()).ToArray(); //loop through my JSON string while (reader.Read()) { //if I'm at a property... if (reader.TokenType == JsonToken.PropertyName) { //convert the property to lower case string readerValue = reader.Value.ToString().ToLower(); if (reader.Read()) //read in the prop value { //is this a mapped prop? if (objProps.Contains(readerValue)) { //get the property info and set the Mapped object's property value PropertyInfo pi = mappedObj.GetType().GetProperty(readerValue, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance); object convertedValue = Convert.ChangeType(reader.Value, pi.PropertyType); pi.SetValue(mappedObj, convertedValue, null); } else { //otherwise, stuff it into the Dictionary mappedObj.TheRest.Add(readerValue, reader.Value); } } } } return mappedObj; } }
/// <summary> /// http://www.weather.com.cn/data/sk/101280601.html /// http://www.weather.com.cn/data/cityinfo/101280601.html /// http://geoip.weather.com.cn/g/ /// http://m.weather.com.cn/data/101190101.html /// 20140531 涂聚文 Geovin Du /// {"weatherinfo":{"city":"深圳","cityid":"101280601","temp":"32","WD":"西南风","WS":"4级","SD":"68%","WSE":"4","time":"16:40","isRadar":"1","Radar":"JC_RADAR_AZ9755_JB"}} /// </summary> public partial class WebForm1 : System.Web.UI.Page { string json_data = string.Empty; string url = string.Empty; //WeatherInfo we = new WeatherInfo(); /// <summary> /// http://social.msdn.microsoft.com/Forums/en-US/4392c97a-3c6e-45b9-99c9-12a979c64910/c-20-jsonnet /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Page_Load(object sender, EventArgs e) { try { url = "http://www.weather.com.cn/data/sk/101280601.html"; WebClient wc = new WebClient(); wc.Encoding = System.Text.Encoding.UTF8;//定义对象语言 json_data = wc.DownloadString(url); //JsonConvert.DeserializeObject<Table>(json_data); //var ser = new JavaScriptSerializer(); //we = _download_serialized_json_data<WeatherInfo>(url); JsonSerializerSettings settings = new JsonSerializerSettings(); WeatherInfo we = JsonConvert.DeserializeObject<WeatherInfo>(json_data, new WeatherInfoConverter());// JsonConvert.DeserializeObject(json_data, Type.GetType, we); Response.Write("城市:"+we.city); Response.Write("城市代码:" + we.cityid); Response.Write("温度:" + we.temp); Response.Write("发布时间:" + we.time); //Response.Write(we.TheRest[""].ToString()); Response.Write("发风:" + we.WD); Response.Write("湿度:" + we.SD); Dictionary<string, object> dict = we.TheRest; //Response.Write(we.TheRest["WD"].ToString()); //for (int i = 0; i < dict.Count; i++) //{ // Response.Write(dict.Keys.ToString()); // Response.Write(dict.Values.ToString()); //} foreach (KeyValuePair<string, object> kvp in dict) { //outputBlock.Text += String.Format("Key = {0}, Value = {1}", kvp.Key, kvp.Value) + "\n"; string s = string.Format("键是:{0} 值是:{1}", kvp.Key.ToString(), (!object.Equals(kvp.Value, null) ? kvp.Value.ToString(): "")); Response.Write(s); } //Hashtable dict = new Hashtable(); //foreach (DictionaryEntry i in dict) //{ // string s = string.Format("键是:{0} 值是:{1}", i.Key.ToString(), i.Value.ToString()); // Response.Write(s); //} } catch (JsonReaderException tu) { Response.Write(tu.Message.ToString()); } } //.net 4.0 //private static T _download_serialized_json_data<T>(string url) where T : new() //{ // using (WebClient w = new WebClient()) // { // string json_data = string.Empty; // // attempt to download JSON data as a string // try // { // json_data = w.DownloadString(url); // } // catch (Exception) { } // // if string with JSON data is not empty, deserialize it to class and return its instance // return !string.IsNullOrEmpty(json_data) ? JsonConvert.DeserializeObject<T>(json_data) : new T(); // } //} }