原文 WebService使用JSON格式传递笔记+JQuery测试
-
因为一些因素,必须改写WebService,很传统,但是很多公司还在用.. 因为XML 的关系,不想让他传递数据的时候过度肥大,所以我必须要尽量干净的JSON.. 于是开始我的改写旅程.. 首先,网络上好多好多好多文件,可能因为状况不同,测试过许多也让我搞混很多次.. 最后有找到答案..笔记一下.. 首先我开了三个不同的WebMethod 来测试三种不同的输出.. GetUserInfoString –取得字符串 GetOneUserInfo - 取得一个对象 GetUsers - 取得对象们
01.usingSystem.Collections.Generic;02.usingSystem.Web.Script.Services;03.usingSystem.Web.Services;04.05.namespaceJsonServiceSample06.{07.08.publicclassUser09.{10.publicstringName {get;set; }11.publicintAge {get;set; }12.}13.14.15.[WebService(Namespace ="", Description ="For Donma Test")]16.[System.ComponentModel.ToolboxItem(false)]17.[ScriptService]18.publicclassService1 : WebService19.{20.21.22.[WebMethod]23.[ScriptMethod(ResponseFormat = ResponseFormat.Json)]24.publicstringGetUserInfoString(stringname,intage)25.{26.returnname +","+ age;27.}28.29.30.[WebMethod]31.[ScriptMethod(ResponseFormat = ResponseFormat.Json)]32.publicUser GetOneUserInfo(stringname,intage)33.{34.return(newUser { Name = name, Age = age });35.36.}37.38.39.[WebMethod]40.[ScriptMethod(ResponseFormat = ResponseFormat.Json)]41.publicUser[] GetUsers(stringname,intage)42.{43.List<User> res =newList<User>();44.res.Add(newUser { Name = name +"1", Age = age });45.res.Add(newUser { Name = name +"2", Age = age });46.47.returnres.ToArray();48.}49.50.}51.}再来一个重点,在每一个Method 上方我都会加上www.it165.net
[WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
因为基于有时候我会需要使用GET 方式传递 所以我在Web Config 中加入 在system.web 中加入
<webServices> <protocols> <add name="HttpGet"/> <add name="HttpPost" /> <add name="Documentation" /> </protocols> </webServices> Web.Config 全文:
01.<?xmlversion="1.0"?>02.03.<!--04.For more information on how to configure your <ahref="http://www.it165.net/pro/webasp/"target="_blank"class="keylink">ASP</a>.NET application, please visit06.-->07.08.<configuration>09.<configSections>10.<sectionGroupname="applicationSettings"type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">11.<sectionname="JsonServiceSample.Properties.Settings"type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"requirePermission="false"/>12.</sectionGroup>13.</configSections>14.<system.web>15.<compilationdebug="true"targetFramework="4.0"/>16.<httpHandlers>17.</httpHandlers>18.19.<webServices>20.<protocols>21.<addname="HttpGet"/>22.<addname="HttpPost"/>23.<addname="Documentation"/>24.</protocols>25.</webServices>26.</system.web>27.28.<applicationSettings>29.<JsonServiceSample.Properties.Settings>30.<settingname="JsonServiceSample_JTestService_Service1"serializeAs="String">31.<value>http://localhost:5403/Service1.asmx</value>32.</setting>33.</JsonServiceSample.Properties.Settings>34.</applicationSettings>35.</configuration>这样试跑一下
奇怪为什么不是JSON ,别紧张…我们继续使用 JQuery 来呼叫看看.. JQuery Code :
01.<input type="button"id="ipt1"value="test"/>02.03.<script type="text/javascript">04.05.functionGetInfo() {06.var$res;07.$.ajax({08.type:"POST",09.url:"Service1.asmx/GetOneUserInfo",10.contentType:"application/json; charset=utf-8",11.async:false,12.cache:false,13.dataType:'json',14.data:"{name:'当麻',age:29}",15.success:function(data) {16.if(data.hasOwnProperty("d")) {17.$res = data.d;18.}19.else20.$res = data;21.}22.});23.return$res;24.}25.26.27.$('#ipt1').click(function() {28.varres = GetInfo();29.alert(res.Name);30.});31.32.33.</script>按钮按下去之后 我让他呼叫 GetOneUserInfo 这 method 并且使用POST 看下结果..
恩恩..的确是JSON, 但是多了一个 d 跟 __type 基本上 __type 不要去动他是不影响,但是 d 这东西必须得处理.. 进行改写..实测过上面三种不同的回传值..都 OK~~ 这样对于传统的 WebService Reference 呼叫 WebService 不会有影响.. 也可以透过JQuery 呼叫传递透过JSON…
本文介绍了一种将WebService与JSON格式结合使用的实践方法,通过具体的示例代码展示了如何实现数据的有效传输,同时提供了使用JQuery进行测试的具体步骤。

被折叠的 条评论
为什么被折叠?



