2011-12-08 24 views
5

Tôi đã tìm thấy một số giải pháp cho điều này trên web dành cho dịch vụ web WCF chứ không phải dịch vụ web ASP.Cách xóa d: và __type khỏi phản hồi JSON cho dịch vụ web ASP

Hiện nay, tôi đang có lấy lại một phản ứng JSON nói rằng:

{"d":[{"__type":"NetworkFuzzWebSvc.Sessions","BaseUri":"http://localbox","SessionId":"43b8716f-40ab-43bf-8311-575c2ecd2730}]} 

Tôi cần nó để trở về:

{"Sessions":["BaseUri":"http://localbox","SessionId":"43b8716f-40ab-43bf-8311-575c2ecd2730}]} 

Đây là một bản sao của mã webservice mà tôi đang sử dụng (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; 
     } 
    } 

Bất kỳ ai có giải pháp cho điều này? Cảm ơn!

Trả lời

1

Tôi không nghĩ rằng bạn có thể. Tôi nghĩ đó là định dạng của json được trả về.

Bạn có thể cố gắng thoát khỏi các bit ResponseFormat và trả về một chuỗi và sử dụng

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

Hoặc thậm chí tốt hơn sử dụng các thư viện JSON.Net.

Đồng thời xem How to not serialize the __type property on JSON objects để biết cách xóa bit __type.

2

Đối remove "d" và "__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

tôi đã phải thiết lập 'automaticFormatSelectionEnabled' false trong cấu hình của tôi nếu không tôi đã kết thúc với một resposne XML chứ không phải là JSON một, nếu không làm việc này một điều trị. –

-1

Nếu bạn đang sử dụng ServiceStack.Text JSON Serializer bạn chỉ cần:

JsConfig.ExcludeTypeInfo = true; 

Chức năng này được tự động thêm trở lại trong v2.28, nhưng mã ở trên giữ nguyên khỏi tuần tự hóa. Bạn cũng có thể thay đổi hành vi này bằng Type với:

JsConfig<Type>.ExcludeTypeInfo = true; 
Các vấn đề liên quan