?ExtJs有一个类:Ext.util.JSON,它提供两个函数:encode、decode。用于序列化和反序列化,功能蛮强大的,也差不多了,但是,在WebService中序列化DataTable、DataSet时,遇到麻烦。这个问题只有自己解决了。
其实这个问题简单的很,没什么大不了的。这儿有一篇文章有代码!就是循环做事嘛。但是,我觉得,如果要用于ExtJs的话,这个代码还不够。因为JsonReader好像还需要一些其他的东西。所以呢,代码还是要修正一下的。
上一篇中,用到了:Ext.util.JSON.decode。事实上,这个函数有简写方式的:Ext.decode。事实上Ext类中两个关JSON序列化的函数:Ext.encode、Ext.decode。以方便使用。
Ext.data.JsonReader需要三个东西:id(主键)、root(记录集的引用)、记录数。为此,我修改了上面的代码,得验证通过的代码如下:
public static class Json
{
??? public static string toJson(DataTable dt)
??? {
??????? StringBuilder JsonString = new StringBuilder();
??????? //Exception Handling???????
??????? if (dt != null && dt.Rows.Count > 0)
??????? {
??????????? JsonString.Append("{ ");
??????????? JsonString.Append("\"count\":" + dt.Rows.Count + ",");
??????????? JsonString.Append("\"rows\":[ ");
??????????? for (int i = 0; i < dt.Rows.Count; i++)
??????????? {
??????????????? JsonString.Append("{ ");
??????????????? for (int j = 0; j < dt.Columns.Count; j++)
??????????????? {
??????????????????? if (j < dt.Columns.Count - 1)
??????????????????? {
??????????????????????? JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\",");
??????????????????? }
??????????????????? else if (j == dt.Columns.Count - 1)
??????????????????? {
??????????????????????? JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\"");
??????????????????? }
??????????????? }
??????????????? /**//*end Of String*/
??????????????? if (i == dt.Rows.Count - 1)
??????????????? {
??????????????????? JsonString.Append("} ");
??????????????? }
??????????????? else
??????????????? {
??????????????????? JsonString.Append("}, ");
??????????????? }
??????????? }
??????????? JsonString.Append("]}");
??????????? return JsonString.ToString();
??????? }
??????? else
??????? {
??????????? return null;
??????? }
??? }
}
实验所得结果如下:
这下子就很明显了。在客户端反序列化的方法如下:
Ext.decode(Ext.decode(response.responseText).d)
一般的情况下应当不会传DataSet吧。实在要传DataSet也容易。调用上面的就行了。写个toJson(DataSet ds),ok了。
详细解决方案
extJs 2.1学习札记(JSON序列化篇)
热度:364 发布时间:2012-11-23 00:03:43.0
相关解决方案
- (Struts2+JSON+Ajax) XMLHttpRequest ==500如何解决
- json 解析有关问题
- Extjs grid 失去选中行的列数据
- struts2-json中诠注@JSON(deserialize=false)是什么用?不是阻止JSON反序列化成JAVA对象吗?求解
- extjs 后台有数据,但是返回到页面为空,jsonStore加载错误,这是咋回事
- 请教哪里可以上到 struts2-json-plugin-2.1.8的源文件
- S2SH、EXTJS、JSON调整后,EXTJS接收不到Struts2的Action传回的值,无语
- extjs 简单有关问题
- extjs+struts2解决办法
- java+jquery easy ui + json + struts分页例子
- ExtJs 处理 datetime 有关问题
- ssh json jar 有关问题
- json 有关问题
- AJAX 传递数据如何样才可以是 json
- jquery.load(*json) 解析不已。求帮忙
- 【EXTJS】iframe里嵌套ext.window,怎样使ext.window弹出到iframe外,该怎么解决
- Tomcat + extjs 入门有关问题
- extjs ColumnModel 怎么实现表格中的数据小数点对齐
- JSON,AJAX
- 2中,可是一直发生java.lang.NoClassDefFoundError: net/sf/json/
- Extjs 变量前的一个加号代表什么意思?解决方法
- extjs grid 怎么实现 行选中变色
- json 转成 string解决办法
- json ,Map转json,全部分了
- ExtJs 提交表单的小疑点
- jquery ajax+json(插件) 提交数据,让人捉摸不透的是:【部分中文显示问号】,该怎么解决
- json 序列化有错误怎么办
- JQUERY json 传值有关问题
- 获取 天候Api 返回的 json 数据
- MVC(Json) 出现提示上载