我在网上找到了几个针对WCF Web服务而不是ASP Web服务的解决方案.
目前,我正在收到一条JSON响应说:
{"d":[{"__type":"NetworkFuzzWebSvc.Sessions","BaseUri":"http://localBox","SessionId":"43b8716f-40ab-43bf-8311-575c2ecd2730}]}
我需要它返回:
{"Sessions":["BaseUri":"http://localBox","SessionId":"43b8716f-40ab-43bf-8311-575c2ecd2730}]}
这是我正在使用的Web服务代码的副本(NetFuzzWebSvc.asmx):
using System; using System.Collections.Generic; using System.Web; using System.Web.Services; using System.Web.Script.Services; namespace NetworkFuzzWebSvc { public class Sessions { public string BaseUri; public string SessionId; } /// <summary> /// Summary description for NetFuzzJson /// </summary> [WebService(Namespace = "http://localBox")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ScriptService] public class NetFuzzJson : WebService { List<Sessions> Sessions = new List<Sessions> { new Sessions{ BaseUri = "http://localBox/",SessionId="43b8716f-40ab-43bf-8311-575c2ecd2730" } }; [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public List<Sessions> GetAllSessions() { return Sessions; } }
有人有解决方案吗?
谢谢!
解决方法
删除“d”和“__type”:
.SVC
[ServiceContract] public interface ITestService { [OperationContract] [WebInvoke(Method = "POST",RequestFormat = WebMessageFormat.Json,ResponseFormat = WebMessageFormat.Json,BodyStyle = WebMessageBodyStyle.WrappedRequest)] List<TestDTO> GetAll(); }
的.config
<behaviors> <endpointBehaviors> <behavior name="DebugJSonBehavior" > <enableWebScript /> <!--need set automaticFormatSelectionEnabled attribute --> <webHttp automaticFormatSelectionEnabled="true" /> </behavior> </endpointBehaviors> <serviceBehaviors> <behavior name="DebugJSonBehavior" > <serviceMetadata httpGetEnabled="true" /> <serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true" /> </behavior> </serviceBehaviors> </behaviors>
JS:
$.ajax({ type: "POST",url: _serviceUrl + "/TestService.svc/GetAll",data: "{}",contentType: "application/json; charset=utf-8",dataType: "json",success: function (dataret) { ... },error: function (xmlHttpRequest,textStatus,errorThrown) {... },complete: function () { ... } });