extJs 2.1学习笔记(JSON序列化篇)
ext吧
全部回复
仅看楼主
level 1
淤泥拿铁 楼主
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)
                     {

2010年09月06日 13点09分 1
level 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了。

2010年09月06日 13点09分 2
1