2011-12-08 28 views
5

我在Web上发现了几个针对WCF Web服务而不是ASP Web服务的解决方案。如何从ASP Web服务的JSON响应中删除d:和__type

目前,我取回一个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; 
     } 
    } 

任何人都有解决方案吗? 谢谢!

回答

1

我不认为你可以。我认为这是返回的json的格式。

你可以尝试摆脱ResponseFormat位,并返回一个字符串,并使用

JavaScriptSerializer ser = new JavaScriptSerializer(); 
string json = ser.Serialize(objectClass); 
return json; 

甚至更​​好使用JSON.Net库。

另请参阅How to not serialize the __type property on JSON objects了解如何删除__type位。

2

对于删除 “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() { ... } 
    }); 
+1

我必须设置'automaticFormatSelectionEnabled'假在我的配置,否则我结束了一个XML resposne,而不是一个JSON一个,否则该工作一种享受:您还可以通过Type与更改此行为。 –

-1

如果您在使用ServiceStack.Text JSON Serializer你只需要:

JsConfig.ExcludeTypeInfo = true; 

此功能在v2.28自动添加回来,但上面的代码保留了这一点的系列化。

JsConfig<Type>.ExcludeTypeInfo = true; 
相关问题