extJs 2.1学习笔记(JSON序列化篇)
2008-07-16 20:32
495 查看
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;
}
}
}
实验所得结果如下:
![](http://img.blog.163.com/photo/CNX_zjbZXfSkbk-DwjTS9A==/4291086019954332275.jpg)
这下子就很明显了。在客户端反序列化的方法如下:
Ext.decode(Ext.decode(response.responseText).d)
一般的情况下应当不会传DataSet吧。实在要传DataSet也容易。调用上面的就行了。写个toJson(DataSet ds),ok了。
其实这个问题简单的很,没什么大不了的。这儿有一篇文章有代码!就是循环做事嘛。但是,我觉得,如果要用于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;
}
}
}
实验所得结果如下:
![](http://img.blog.163.com/photo/CNX_zjbZXfSkbk-DwjTS9A==/4291086019954332275.jpg)
这下子就很明显了。在客户端反序列化的方法如下:
Ext.decode(Ext.decode(response.responseText).d)
一般的情况下应当不会传DataSet吧。实在要传DataSet也容易。调用上面的就行了。写个toJson(DataSet ds),ok了。
相关文章推荐
- extJs 2.1学习笔记(JSON序列化篇)
- extJs 2.1学习笔记(通信篇)
- extJs 2.1学习笔记(Ext.data.Store篇)
- extJs 2.1学习笔记(Ext.TabPanel篇)
- extJs 2.1学习笔记(Ext.data.JsonReader篇二)
- 【学习笔记】C#Json和Bson序列化中遇到的一些问题
- extJs 2.1学习笔记(Ext.TabPanel篇)
- ZP的EXTJS学习笔记(二)——calendar的改造(example改造、日程管理实现、json对date数据的前后台处理)
- extJs 2.1学习笔记(Ext.data.JsonReader篇二)
- extJs 2.1学习笔记(Ext.data.JsonReader篇一)
- springboot2.0学习笔记 自定义JSON序列化程序和反序列化器
- extJs 2.1学习笔记(通信篇)
- extJs 2.1学习笔记(Ext.data.Store篇)
- extJs 2.1学习笔记(Ext.data.Store篇)
- 【转】extjs学习笔记三[Ext+json+jsp构建的动态树]
- extJs 2.1学习笔记(Ext.data.Connection篇一)
- extJs 2.1学习笔记(Ext.TabPanel篇)
- extJs 2.1学习笔记(Ext.data.JsonReader篇二)
- .NET C# Json序列化与反序列化——Newtonsoft.Json学习笔记
- extJs 2.1学习笔记(Ext.data.Connection篇一)