badatatable转成json_.NET中把DataTable转换成JSON的总结

最近在做公司的一个project,其中有一部分,要求浏览器端通过jquery ajax调用服务器端返回json格式的多条数据。网上搜索了一下,找到下面两个方法在.NET中生成json。

方法一:.NET Framework 3.0及更早的版本:

public static stringGetJSONString(DataTable Dt)

{string[] StrDc = new string[Dt.Columns.Count];string HeadStr = string.Empty;for (int i = 0; i < Dt.Columns.Count; i++)

{

StrDc[i]=Dt.Columns[i].Caption;

HeadStr+= "\"" + StrDc[i] + "\" : \"" + StrDc[i] + i.ToString() + "¾" + "\",";

}

HeadStr= HeadStr.Substring(0, HeadStr.Length - 1);

StringBuilder Sb= newStringBuilder();

Sb.Append("{\"" + Dt.TableName + "\" : [");for (int i = 0; i < Dt.Rows.Count; i++)

{string TempStr =HeadStr;

Sb.Append("{");for (int j = 0; j < Dt.Columns.Count; j++)

{

TempStr= TempStr.Replace(Dt.Columns[j] + j.ToString() + "¾", Dt.Rows[i][j].ToString());

}

Sb.Append(TempStr+ "},");

}

Sb= new StringBuilder(Sb.ToString().Substring(0, Sb.ToString().Length - 1));

Sb.Append("]}");returnSb.ToString();

}

方法二:.NET 3.5及以上版本:

public static stringGetJSONString(DataTable dt)

{

List> rows = new List>();foreach (DataRow dr indt.Rows)

{

Dictionary row = new Dictionary();foreach (DataColumn dc indt.Columns)

{

row.Add(dc.ColumnName, dr[dc]);

}

rows.Add(row);

}

System.Web.Script.Serialization.JavaScriptSerializer ser= newSystem.Web.Script.Serialization.JavaScriptSerializer();returnser.Serialize(rows);

}

方法一其实适用于所有的.NET版本,手动生成json字符串。方法二调用了.NET3.5新加入的JavaScriptSerializer类的Serialize来转换输出json字符串。因为datatable是.net的数据格式,里面除了数据之外,还包含有其它很多信息(比如tablename,primarykey,constraints等),所以需要将它转换成dictionary之后,才可以转换。如果DataTable里面含有datetime这样格式的数据,那么输出的json字符串会是"\/Date(刻度数)\/"。刻度数是一个正的或负的长值,该值指示从 UTC 1970 年 1 月 1 日午夜开始已经过的刻度数(毫秒)。在Javascript中,可以调用下面的函数来解析这个json值:

functionParseJSONDate (value) {vara;if (typeof value === 'string') {

a= /\/Date\((\d*)\)\//.exec(value);if(a) {return new Date(+a[1]);

}

}returnvalue;

}

或者

functionParseJSONDate (value){return new Date(parseInt(value.substr(6)));

}

有一点需要注意的是,websevice是会根据请求,自动将结果转换成json格式的数据,所以没有必要再手动的去序列化json数据。

参考地址:

http://weblogs.asp.net/navaidakhtar/converting-data-table-dataset-into-json-string

http://www.telerik.com/forums/consuming-a-net-json-web-service

http://encosia.com/asp-net-web-services-mistake-manual-json-serialization/

http://encosia.com/a-breaking-change-between-versions-of-aspnet-ajax/

http://encosia.com/3-mistakes-to-avoid-when-using-jquery-with-aspnet-ajax/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值