ArrayList、HashTable到JSON

学习MINIUI框架有几天了,今天算是弄明白数据传递的原理了。
要提到的两个东西是HashTable和ArrayList
HashTable 是键值对的形式,通过键来访问值。
ArrayList集合 可以说是个对象数组,像数组一样通过索引来访问值。
下面通过这段代码,做测试,来了解其原理

            public static Hashtable SearchUser(string key, int index, int size, string sortField, string sortOrder)
        {//查询语句
            string sql = string.Format(@"SELECT *,(DaySalary*WorkTime) allMoney FROM TraineeInfo WHERE (UserName LIKE '%{0}%' or IdentityCardNumber like '%{0}%')", key);
            //排序字段
            if (String.IsNullOrEmpty(sortField) == false)
            {
                if (sortOrder != "desc") sortOrder = "asc";
                sql += " order by " + sortField + " " + sortOrder;
            }
            else
            {
                sql += " order by ID desc ";
            }
            //调用查询
            DataTable dt = DBHelper.ExecuteDatatable(sql);
            //所有结果存入集合 调用dt转集合方法
            ArrayList dataall = DataTable2ArrayList(dt);
            //分页
            ArrayList data = new ArrayList();
            int start = index * size, end = start + size;
            for (int i = 0, l = dataall.Count; i < l; i++)
            {
                Hashtable record = (Hashtable)dataall[i];
                if (record == null) continue;
                if (start <= i && i < end)
                {
                    data.Add(record);
                }
            }

            Hashtable result = new Hashtable();
            result["data"] = data;
            result["total"] = dataall.Count;
            return result;//此处将返回一个哈希表,第一个键值为数据,第二个问统计信息
            //转化为json
    }    


                 /// <summary>
        /// DT转化成集合
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        private static ArrayList DataTable2ArrayList(DataTable data)
        {
            ArrayList array = new ArrayList();
            for (int i = 0; i < data.Rows.Count; i++)
            {
                DataRow row = data.Rows[i];

                Hashtable record = new Hashtable();
                for (int j = 0; j < data.Columns.Count; j++)
                {
                    object cellValue = row[j];
                    if (cellValue.GetType() == typeof(DBNull))
                    {
                        cellValue = null;
                    }
                    record[data.Columns[j].ColumnName] = cellValue;
                }
                array.Add(record);
            }
            return array;
        }

在以上代码中,第16行dt的形式为:

这个就是普通的不能再普通,我们熟悉的不能再熟悉的数据表形式了,就不再解释了。
在18行 转化为ArrayList后形式为:

这是通过官方demo的一个方法转化的,可以看出,它是把一行作为一个对象写进了ArrayList,其中的每一行又都包含了列名和此行对应的值,看看 对于一行中的每个列名和值的组合 不就是哈希表的形式吗? 接着继续往下分析

在35行 将数据打包写入哈希表的第一个键值,统计信息放第二个键值后结果为:

其实就是用哈希表对上一步的ArrayList集合又包裹了一层,取键名为data,并且又添加了一个键值对,包含的是统计信息。为什么这么做呢?为了json呀!
看看对于这个哈希表,用JSON编码后的情况
执行操作

    string json JSON.Encode(result);

结果:

{
    "data": [
        {
            "DaySalary": 80, 
            "Note": null, 
            "UserName": "李22", 
            "PhoneNumber": "120", 
            "Sex": "0", 
            "allMoney": 640, 
            "HomeAddress": null, 
            "ID": "YG0002", 
            "Type": 0, 
            "WorkTime": 8, 
            "IdentityCardNumber": "123456789012345677"
        }, 
        {
            "DaySalary": 100, 
            "Note": null, 
            "UserName": "张111", 
            "PhoneNumber": "110", 
            "Sex": "1", 
            "allMoney": 0, 
            "HomeAddress": null, 
            "ID": "YG0001", 
            "Type": 1, 
            "WorkTime": 0, 
            "IdentityCardNumber": "123456789012345678"
        }
    ], 
    "total": 2
}

实际情况就是,这个json由两个部分构成:

第一个是data,值为一个数组,由两个对象构成,分别代表两条数据
第二个直接是一个简单的键值对

对于MINIUI来说,给前台一个这样一个json,它就会把数据为我们加载出来,其中加入的total是记录总数,用于分页,不分页则可以去掉。
源码

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值