csharp:using Newtonsoft.Json.Net2.0 in .net 2.0 webform

13297 단어 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

좋은 웹페이지 즐겨찾기