ArrayList、HashTable到JSON
来源:互联网 发布:我爱你韩国知乎 编辑:程序博客网 时间:2024/05/17 07:06
学习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
- ArrayList、HashTable到JSON
- arraylist、hashtable
- HashTable,HashMap/ArrayList,Vector
- ArrayList及Hashtable示例
- 9--10 ArrayList Hashtable
- powershell Hashtable to arraylist
- ArrayList&LinkedList;HashMap&HashTable
- 如何遍历Hashtable、ArrayList
- Unity中用到的C#补充(四)- Array,ArrayList,List,Drictionary,Hashtable
- 传Json到Jersey始终获取不到Arraylist
- Vector & ArrayList ,ArrayList & LinkedList,Hashtable & HashMap
- LinkedList,ArrayList,Vector,HashTable,HashMap
- Hashtable, ArrayList, List, Dictionary学习
- Hashtable, ArrayList, List, Dictionary学习
- LinkedList,ArrayList,Vector,HashTable,HashMap
- Hashtable, ArrayList, List, Dictionary学习
- Vector、ArrayList和hashtable hashmap
- HashTable、HashMap、Vector、ArrayList区别
- Linux文件与文件系统的压缩与打包
- C语言中.h和.c文件解析(很精彩)
- OC可变数组(NSMutableArray)相关方法
- Ajax和JSON
- LeetCode - Reverse Vowels of a String
- ArrayList、HashTable到JSON
- IOS-62-实现进程间、线程间通信的方式
- Xcode 6制作动态及静态Framework
- MiniFilter文件系统学习
- HibernateDaosupport,HibernateCallback,HibernateTemplate的用法
- OSGi服务开发
- maven 工程常见问题
- ZOJ 3939 The Lucky Week (400年一个周期)
- 国内server san分析对比