您的位置:首页 > Web前端 > JavaScript

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

2010-09-23 15:18 555 查看
最近实现一种将数据表转为JSON表示的新方法。

这种方法表示的JSON数据更省空间(尤其是网络传输,能省很多数据量),使用起来也很方便。

假设有这样一张数据表:

IDNameLocation
1周杰伦香港
2侯佩岑台湾
3张靓颖大陆
一般的JSON表示方法为:

[

{"ID":1, "Name": "周杰伦", "Location": "香港"},

{"ID":2, "Name": "侯佩岑", "Location": "台湾"},

{"ID":3, "Name": "张靓颖", "Location": "大陆"}

]

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

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

{

"C":{"ID":0, "Name":1, "Location":2},

"D":[

[1, "周杰伦", "香港"],

[2, "侯佩岑", "台湾"],

[3, "张靓颖", "大陆"]

]}

这种方法将字段信息单独提取到C属性里,而D属性是纯粹的记录数据。

其实D属性本身已经完全能表示记录内容,C属性只是为了使用时方便。

在这短短几个字段及几条数据的极端情况下,已经省下几十字节。

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

通用方法取周杰伦:[0].Name

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

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

using System;

using System.Text;

using System.Web.Script.Serialization;

/// <summary>

/// 一种JSON表示DataTable的新方法

/// <see href="http://bianbian.org/technology/javascript/361.html" />

/// </summary>

public static class JsonUtil

{

static JavaScriptSerializer _jss = new JavaScriptSerializer();

/// <summary>

/// DataTable 转换成 JSON string。

/// </summary>

/// <param name="dt">需要转换的DataTable</param>

/// <returns>JSON结构字符串</returns>

public static string FromDataTable(System.Data.DataTable dt)

{

StringBuilder sb = new StringBuilder(256);

FormDataTable(dt, sb);

return sb.ToString();

}

/// <summary>

/// DataTable 转换成 JSON string。

/// </summary>

/// <param name="dt">需要转换的DataTable</param>

/// <param name="sb">StringBuilder</param>

public static void FormDataTable(System.Data.DataTable dt, StringBuilder sb)

{

sb.Append("{C:{");

// -> {"ID":0, "Name":1}

for (int j = 0; j < dt.Columns.Count; j++)

{

if (j > 0)

sb.Append(',');

sb.Append('"').Append(dt.Columns[j].ColumnName).Append('"')

.Append(':').Append(j);

}

sb.Append("},D:[");

for (int i = 0; i < dt.Rows.Count; i++)

{

if (i > 0)

sb.Append(',');

sb.Append('[');

for (int j = 0; j < dt.Columns.Count; j++)

{

if (j > 0)

sb.Append(',');

_jss.Serialize(dt.Rows[i][j], sb);

}

sb.Append(']');

}

sb.Append("]}");

}

}

©2012 便便代码人生. All Rights Reserved.

.
标签: C#, DataTable, JSON

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

相关日志

[原] COM调用PowerPoint后PowerPNT.exe进程仍驻留内存的问题 (0)

[原] C#泛型实现流中C/C++格式的struct数据的通用读取方法 (2)

[原] C的struct和JSON交互 (1)

[译]JSON的C语言实现: JSON-C – A JSON implementation in C (5)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: