c# 将JSON解析,字典Demo

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Newtonsoft.Json;
using System.Web.Script.Serialization;
using System.Collections;

namespace 字典Demo
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        public string json = "{\"dataSet\":{\"header\":{\"returnCode\":\"0\",\"errorInfo\":\"HTTP请求错误\",\"version\":\"V1.0R010\",\"totalRows\":\"2000\",\"returnRows\":\"20\",\"ImageUrl\":\"http://img.baidu.com/img/logo-zhidao.gif\"},\"fieldDefine\":{\"assetId\":\"bloodstrike\",\"serverIdcId\":\"int\",\"inputTime\":\"datetime\"},\"data\":{\"row\":[{\"AssetId\":\"TCNS2006888\",\"ServerIdcId\":\"1\",\"InputTime\":\"2008-12-12\",\"AssetName\":\"月\"},{\"AssetId\":\"TCNS2006889\",\"ServerIdcId\":\"2\",\"InputTime\":\"2008-1-1\",\"AssetName\":\"亮\"}]}}}";
        protected void Page_Load(object sender, EventArgs e)
        {

            DictJson();
        }
        /// <summary>
        /// JSON配合字典使用
        /// </summary>
        public void DictJson()
        {
            Dictionary<string, object> dic = JsonToDictionary(json);//将Json数据转成dictionary格式

            Dictionary<string, object> dataSet = (Dictionary<string, object>)dic["dataSet"];

            //使用KeyValuePair遍历数据
            foreach (KeyValuePair<string, object> item in dataSet)
            {
                if (item.Key.ToString() == "header")//获取header数据
                {
                    var subItem = (Dictionary<string, object>)item.Value;
                    //方法一,通过循环遍历的方式全部读取
                    //foreach (var str in subItem)
                    //{
                    //    //显示到界面
                    //    if (str.Key.ToString() == "ImageUrl")
                    //    {
                    //        this.Image1.Width = 137;
                    //        this.Image1.Height = 46;
                    //        this.Image1.ImageUrl = str.Value.ToString();
                    //    }
                    //   Response.Write("<li>" + str.Key + ":" + str.Value + "</li>");
                    //}
                    //方法二,读取字典中指定的参数
                    this.Image1.Width = 137;
                    this.Image1.Height = 46;
                    this.Image1.ImageUrl = subItem["ImageUrl"].ToString();

                }
               
                if (item.Key.ToString() == "fieldDefine")//获取fieldDefine数据
                {
                    var subItem = (Dictionary<string, object>)item.Value;
                    Response.Write("<li>" +subItem["assetId"].ToString() + "</li>");
                }
            }
        }
        /// <summary>
        /// 将json数据反序列化为Dictionary
        /// </summary>
        /// <param name="jsonData">json数据</param>
        /// <returns></returns>
        private  Dictionary<string, object> JsonToDictionary(string jsonData)
        {
            //实例化JavaScriptSerializer类的新实例
            JavaScriptSerializer jss = new JavaScriptSerializer();
            try
            {
                //将指定的 JSON 字符串转换为 Dictionary<string, object> 类型的对象
                return jss.Deserialize<Dictionary<string, object>>(jsonData);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        protected void Button1_Click(object sender, EventArgs e)
        {

            Dictionary<string, object> dic = JsonToDictionary(json);//将Json数据转成dictionary格式

            Dictionary<string, object> dataSet = (Dictionary<string, object>)dic["dataSet"];

            //使用KeyValuePair遍历数据
            foreach (KeyValuePair<string, object> item in dataSet)
            {
                //找到data数据字典
                if (item.Key.ToString() == "data")//获取data数据
                {
                    var subItem = (Dictionary<string, object>)item.Value;
                    //data中遍历数据
                    foreach (var str in subItem)
                    {
                        //判断是否有row数据
                        if (str.Key.ToString() == "row")
                        {
                            //如果有row ,通过字典方法进行字典数据创建
                            var subRow = (Dictionary<string, object>)item.Value;
                            //row里是数组数据,因此将字典数据重新塞入数组中排列
                            foreach (ArrayList array in subRow.Values)
                            {
                                //通过数组的总量,来设置循环读取次数
                                for (int i=0; i < array.Count; i++)
                                {
                                //将数组数据重新塞入字典中 遍历输出
                                var subArr = (Dictionary<string, object>)array[i];
                                //foreach (var strArr in subArr)
                                //{
                                //    Response.Write("<li>" + strArr.Key + ":" + strArr.Value + "</li>");
                                //}
                                this.Label1.Text = subArr["AssetName"].ToString();
                                
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/ZeroRm/article/details/78982818