zoukankan      html  css  js  c++  java
  • csharp:using Newtonsoft.Json.Net2.0 in .net 2.0 webform

     /// <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) + "
    ";
                        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();
            //    }
            //}
    
        }
    

     http://james.newtonking.com/json

  • 相关阅读:
    Oracle ASH报告生成和性能分析
    Oracle AWR报告生成和性能分析
    oracle和mysql批量合并对比
    Oracle
    Delphi
    Delphi
    Delphi
    Delphi
    Delphi
    Delphi
  • 原文地址:https://www.cnblogs.com/geovindu/p/3763331.html
Copyright © 2011-2022 走看看