一种将数据表DataTable转为JSON格式的新方法

来源:互联网 发布:大学专业解析知乎 编辑:程序博客网 时间:2024/05/29 12:42

最近实现一种将数据表转为JSON表示的新方法。
这种方法表示的JSON数据更省空间(尤其是网络传输,能省很多数据量),使用起来也很方便。
假设有这样一张数据表:

IDNameLocation1周杰伦香港2侯佩岑台湾3张靓颖大陆

一般的JSON表示方法为:

  1. [
  2. {"ID":1,"Name":"周杰伦","Location":"香港"},
  3. {"ID":2,"Name":"侯佩岑","Location":"台湾"},
  4. {"ID":3,"Name":"张靓颖","Location":"大陆"}
  5. ]

可以看到,数据表的字段信息(column)在每条记录里都写了一遍,比较浪费空间。如果字段很多很长,甚至会比有效内容更多。随着记录数增加,浪费的数据量是很可观的。尤其像以前小百合BBS自己付流量费的时候,流量啊流量。。。。。。

我实现的表示方法产生的JSON格式是这样的:

  1. {
  2. "C":{"ID":0,"Name":1,"Location":2},
  3. "D":[
  4. [1,"周杰伦","香港"],
  5. [2,"侯佩岑","台湾"],
  6. [3,"张靓颖","大陆"]
  7. ]}

这种方法将字段信息单独提取到C属性里,而D属性是纯粹的记录数据。
其实D属性本身已经完全能表示记录内容,C属性只是为了使用时方便。
在这短短几个字段及几条数据的极端情况下,已经省下几十字节。

下面对比使用方法,我承认这种方法稍微比通用的方法复杂一点,但是带来的节省,个人认为还是值得的:

  1. 通用方法取周杰伦:[0].Name
  2. 我的方法取周杰伦:D[0][C.Name]

下面是上述DataTable转JSON的C#代码:

  1. usingSystem;
  2. using System.Text;
  3. using System.Web.Script.Serialization;
  4. /// <summary>
  5. /// 一种JSON表示DataTable的新方法
  6. /// <see href="http://bianbian.org/technology/javascript/361.html" />
  7. /// </summary>
  8. public staticclass JsonUtil
  9. {
  10.     static JavaScriptSerializer_jss = newJavaScriptSerializer();
  11.  
  12.     /// <summary>
  13.     /// DataTable 转换成 JSON string。
  14.     /// </summary>
  15.     /// <param name="dt">需要转换的DataTable</param>
  16.     /// <returns>JSON结构字符串</returns>
  17.     public staticstring FromDataTable(System.Data.DataTabledt)
  18.     {
  19.         StringBuilder sb =new StringBuilder(256);
  20.         FormDataTable(dt,sb);
  21.         return sb.ToString();
  22.     }
  23.  
  24.     /// <summary>
  25.     /// DataTable 转换成 JSON string。
  26.     /// </summary>
  27.     /// <param name="dt">需要转换的DataTable</param>
  28.     /// <param name="sb">StringBuilder</param>
  29.     public staticvoid FormDataTable(System.Data.DataTabledt, StringBuildersb)
  30.     {
  31.         sb.Append("{C:{");
  32.         // -> {"ID":0, "Name":1}
  33.         for (intj = 0;j < dt.Columns.Count;j++)
  34.         {
  35.             if (j >0)
  36.                 sb.Append(',');
  37.             sb.Append('"').Append(dt.Columns[j].ColumnName).Append('"')
  38.                 .Append(':').Append(j);
  39.         }
  40.         sb.Append("},D:[");
  41.  
  42.         for (inti = 0;i < dt.Rows.Count;i++)
  43.         {
  44.             if (i >0)
  45.                 sb.Append(',');
  46.             sb.Append('[');
  47.             for (intj = 0;j < dt.Columns.Count;j++)
  48.             {
  49.                 if (j >0)
  50.                     sb.Append(',');
  51.                 _jss.Serialize(dt.Rows[i][j],sb);
  52.             }
  53.             sb.Append(']');
  54.         }
  55.         sb.Append("]}");
  56.     }
  57. }
标签: C#, DataTable, JSON

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道
原创粉丝点击