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

Posted petewell

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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("何", "若瑄", "loveyou@yahoo.com.tw");
11 ????????dt.Rows.Add("毛", "俊杰", "momotw@gamil.com");
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


以上是关于ASP.NET AJAX Call Web Service , Return JSON Format String的主要内容,如果未能解决你的问题,请参考以下文章

Asp .Net Core 2.2 Razor Pages Ajax Call Post 不工作

使用 ajax asp.net 调用 Web 服务

使用ajax调用asp.net web表单代码

Asp.net Webservice - 使用 jquery AJAX 安全调用 Web 服务

如何使用 ajax 从跨域调用 asp.net Web 服务

浅析Asp.net MVC 中Ajax的使用