2011-12-08 21 views
5

के लिए जेएसओएन प्रतिक्रिया से डी: और __type को कैसे हटाएं मुझे इस वेब पर डब्ल्यूसीएफ वेब सेवा के लिए कई समाधान मिल गए हैं, न कि एएसपी वेब सेवा।एएसपी वेब सेवा

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

मैं इसे जरूरत है वापस जाने के लिए:

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

यहाँ वेब सेवा कोड की एक प्रति है कि मैं का उपयोग कर रहा है

वर्तमान में, मैं एक JSON प्रतिक्रिया है कि कहते हैं वापस हो रही है (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

मुझे नहीं लगता कि आप कर सकते हैं। मुझे लगता है कि जेसन का प्रारूप वापस आ गया है।

आप ResponseFormat बिट से छुटकारा पाने की कोशिश कर सकते हैं और एक स्ट्रिंग लौट सकते हैं और

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

या और भी बेहतर JSON.Net पुस्तकालयों का उपयोग का उपयोग करें।

__type बिट को हटाने के लिए How to not serialize the __type property on JSON objects पर भी देखें।

2

निकालें "घ" और "__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> 

जे एस:

$.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' मेरी config अन्यथा मैं एक JSON एक एक एक्सएमएल resposne बजाय साथ समाप्त हो गया में स्थापित करने के लिए किया था, अन्यथा यह एक का इलाज काम किया: तुम भी साथ Type करके इस व्यवहार को बदल सकते हैं। –

-1

आप उपयोग कर रहे हैं ServiceStack.Text JSON Serializer आपको बस इसकी आवश्यकता है:

JsConfig.ExcludeTypeInfo = true; 

यह कार्यक्षमता स्वचालित रूप से v2.28 में वापस जोड़ा गया, लेकिन कोड ऊपर क्रमबद्धता से बाहर रहता है।

JsConfig<Type>.ExcludeTypeInfo = true;