一种将数据表DataTable转为JSON格式的新方法
2011-07-29 16:38
405 查看
最近实现一种将数据表转为JSON表示的新方法。
这种方法表示的JSON数据更省空间(尤其是网络传输,能省很多数据量),使用起来也很方便。
假设有这样一张数据表:
一般的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("]}");
}
}
标签: C#,
DataTable, JSON
遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道
这种方法表示的JSON数据更省空间(尤其是网络传输,能省很多数据量),使用起来也很方便。
假设有这样一张数据表:
ID | Name | Location |
1 | 周杰伦 | 香港 |
2 | 侯佩岑 | 台湾 |
3 | 张靓颖 | 大陆 |
[
{"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("]}");
}
}
标签: C#,
DataTable, JSON
遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道
相关文章推荐
- [原] 一种将数据表DataTable转为JSON格式的新方法
- 一种将数据表DataTable转为JSON格式的新方法
- 将数据表DataTable转为压缩JSON格式
- DataTable转为JSON数据格式代码
- DataTable转为JSON数据格式代码
- DataTable转为JSON数据格式代码
- DataTable转为JSON数据格式代码
- table数据转换json格式方法
- 好奇怪啊,如果邮箱JSON格式的字符串不是在一行上,那么转为JSON将转换不成功,估计是数据格式有问题吧
- JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例
- 24.使用getJSON()方法异步加载JSON格式数据
- C++ Builder 使用 JsonCpp 解析json格式数据方法( 支持 UNICODE (UTF-16) / UTF-8 )
- 其他格式的数据转化为 json格式的方法
- Android中解析JSON格式数据常见方法合集
- Spring MVC 对于返回JSON格式数据的中文乱码 解决方法
- $.ajax返回的JSON格式的数据后无法执行success的解决方法
- C#根据指定url下载文件并读取.csv数据转为json格式
- jQuery向后台传入json格式数据的方法
- Asp.net C# 使用Newtonsoft.Json 实现DataTable转Json格式数据
- PHP中使用json数据格式定义字面量对象的方法