ASP.NET AJAX Call Web Service , Return JSON Format String

最近同事问用ASP.NET AJAX Call Web Service可以返回DataTable吗?现在公司项目的后台很多都直用AJAX作掉,达到异步的效果,目前公司的作法是用Web Service回传一个 List 到前端给JavaScript作Parse,Parse过程花调许多程序与性能,所以问题来了,如果能直接返回DataTable该有多好啊!?


最近同事问用ASP.NET AJAX Call Web Service可以返回DataTable吗?

现在公司项目的后台很多都直用AJAX作掉,达到异步的效果,

目前公司的作法是用Web Service回传一个 List 到前端给JavaScript作Parse,

Parse过程花调许多程序与性能,所以问题来了,如果能直接返回DataTable该有多好啊!?

是的,要回传DataTable其实是可行的,使用ASP.NET 2.0 AJAX Futures 的确有方法可以作到,

只不过,该Solution目前还是CTP,且满久了,不知何时才会发布正式版,还是石沉大海了?

后来我提出了一个解决方案,也可以达到"感觉像"返回一个DataTable,那就是使用JSON,

这里使用一个C# Class来作解析,可直接传入DataTable到这个类里的Method当参数,

该Method会教这个DataTable提炼成JSON的Format String,所以该Web Service回传类型是一个String Type,

C# Class (DT2JSON) 如下:

001 using ...System.Data;
002 using System.Text;
003
004 public class DT2JSON
005 ...{
006     /////
007     /// 将DataTable转换成JSON格式字符串 (不可指定查询字段)
008     /// JavaScript使用方式:OBJ.Table[0].Row[0].Cell[0].Data
009     ///

010     /// DataTable
011     /// 回传一个JSON格式的DataTable内容
012     public static string JSON_DataTable(DataTable dt)
013     ...{
014         StringBuilder JsonString = new StringBuilder();
015         JsonString.Append("...{ "");
016         JsonString.Append(""Table":[...{ "
043         JsonString.Append("]}]});
044         return JsonString.ToString();
045     });
017         JsonString.Append(""Row":[ ");
018         for (int i = 0; i < dt.Rows.Count; i++)
019         ...{
020             JsonString.Append("...{ "
038             else
039             ...{
040                 JsonString.Append("]});
041             }, ");
021             JsonString.Append(""Cell":[ ");
022             for (int j = 0; j < dt.Columns.Count; j++)
023             ...{
024                 if (j < dt.Columns.Count - 1)
025                 ...{
026                     JsonString.Append("...{"," + ""Value":"" + dt.Rows[i][j].ToString() + ""});
027                 }
028                 else if (j == dt.Columns.Count - 1)
029                 ...{
030                     JsonString.Append("...{"" + ""Value":"" + dt.Rows[i][j].ToString() + ""});
031                 }
032             }
033
034             if (i == dt.Rows.Count - 1)
035             ...{
036                 JsonString.Append("]});
037             } "
042         }
046
047     /////
048     /// 将DataTable转换成JSON格式字符串 (可指定查询字段)
049     /// JavaScript使用方式:OBJ.Data[0].Name
050     ///

051     /// DataTable
052     /// 回传一个JSON格式的DataTable内容
053     public static string CreateJsonParameters(DataTable dt)
054     ...{
055         StringBuilder JsonString = new StringBuilder();
056         if (dt != null && dt.Rows.Count > 0)
057         ...{
058             JsonString.Append("...{ "
084             JsonString.Append("]});
085             return JsonString.ToString();
086         });
059             JsonString.Append(""Data":[ ");
060             for (int i = 0; i < dt.Rows.Count; i++)
061             ...{
062                 JsonString.Append("...{ "
079                 else
080                 ...{
081                     JsonString.Append("});
082                 }, ");
063                 for (int j = 0; j < dt.Columns.Count; j++)
064                 ...{
065                     if (j < dt.Columns.Count - 1)
066                     ...{
067                         JsonString.Append(""" + dt.Columns[j].ColumnName.ToString() + "":" + """ + dt.Rows[i][j].ToString() + "",");
068                     }
069                     else if (j == dt.Columns.Count - 1)
070                     ...{
071                         JsonString.Append(""" + dt.Columns[j].ColumnName.ToString() + "":" + """ + dt.Rows[i][j].ToString() + """);
072                     }
073                 }
074
075                 if (i == dt.Rows.Count - 1)
076                 ...{
077                     JsonString.Append("});
078                 } "
083             }"
087         else
088         ...{
089             return null;
090         }
091     }
092
093     /////
094     /// 将DataTable转换成JSON格式字符串 (可指定查询字段)
095     /// JavaScript使用方式:OBJ.[DataTable名称][0].Name
096     ///

097     /// DataTable名称
098     /// DataTable
099     /// 回传一个JSON格式的DataTable内容
100     public static string CreateJsonParameters(string dtName, DataTable dt)
101     ...{
102         StringBuilder JsonString = new StringBuilder();
103         if (dt != null && dt.Rows.Count > 0)
104         ...{
105             JsonString.Append("...{ "
131             JsonString.Append("]});
132             return JsonString.ToString();
133         });
106             JsonString.AppendFormat(""...{0}":[ ", dtName.Trim());
107             for (int i = 0; i < dt.Rows.Count; i++)
108             ...{
109                 JsonString.Append("...{ "
126                 else
127                 ...{
128                     JsonString.Append("});
129                 }, ");
110                 for (int j = 0; j < dt.Columns.Count; j++)
111                 ...{
112                     if (j < dt.Columns.Count - 1)
113                     ...{
114                         JsonString.Append(""" + dt.Columns[j].ColumnName.ToString() + "":" + """ + dt.Rows[i][j].ToString() + "",");
115                     }
116                     else if (j == dt.Columns.Count - 1)
117                     ...{
118                         JsonString.Append(""" + dt.Columns[j].ColumnName.ToString() + "":" + """ + dt.Rows[i][j].ToString() + """);
119                     }
120                 }
121
122                 if (i == dt.Rows.Count - 1)
123                 ...{
124                     JsonString.Append("});
125                 } "
130             }"
134         else
135         ...{
136             return null;
137         }
138     }
139 }

Web Service Method使用方式:

01     [WebMethod]
02     public string GetDataTable()
03     ...{
04         DataTable dt = new DataTable();
05
06         dt.Columns.Add(new DataColumn("Name", typeof(string)));
07         dt.Columns.Add(new DataColumn("LastName", typeof(string)));
08         dt.Columns.Add(new DataColumn("Email", typeof(string)));
09
10         dt.Rows.Add("何", "若瑄", "[email protected]");
11         dt.Rows.Add("毛", "俊杰", "[email protected]");
12
13         return DT2JSON.JSON_DataTable(dt);
14     }

ASPX JavaScript 使用方式,这里是采jQuery的作法,JavaScript作法也差不多,
调用用法可以参数C# Class,我有写在注解里。

这里引进了3个JS File
第一个是jQuery主程序
第二个是可以让VS 2008 SP1支持jQuery intellisense
第三个是jQuery Plugin,用它来Parse JSON (下载)

01     
02     
03     
04     

就这样,简简单单就可以调用JSON的数据,网页间传递数据使用JSON真的挺方便的,

值得一提的是JSON的速度比较快,用起来感觉像Array,而XML呢?虽然速度比JSON慢一滴滴,

但能表现的数据格式可就非常强大的柳!

原文:大专栏  ASP.NET AJAX Call Web Service , Return JSON Format String


猜你喜欢

转载自www.cnblogs.com/petewell/p/11516602.html