2013-10-24 9 views
13

मैं निम्न विधि है से JSON उत्तर प्राप्त करने के लिए:कैसे एक 3.5 ASMX वेब सेवा

using System.Web.Services; 
using System.Web.Script.Services; 
using System.Web.Script.Serialization; 
using Newtonsoft.Json; 
using System.Collections; 

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
//[System.ComponentModel.ToolboxItem(false)] 
[System.Web.Script.Services.ScriptService] 

// [System.Web.Script.Services.ScriptService] 
public class Tripadvisor : System.Web.Services.WebService { 

    public Tripadvisor() { 

     //Uncomment the following line if using designed components 
     //InitializeComponent(); 
    } 


    [WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public string HotelAvailability(string api) 
    { 
     JavaScriptSerializer js = new JavaScriptSerializer(); 
     string json = js.Serialize(api); 
     //JsonConvert.SerializeObject(api); 
     return json ; 
    } 

यहाँ मैं ResponseFormat विशेषता निर्धारित json रों अभी भी एक्सएमएल के रूप में वापस जा रहा है।

मैं इस एएसएमएक्स सेवा का उपयोग कर जेसन प्रारूप बनाना चाहता हूं कोई विचार?

+0

संभावित डुप्लिकेट [एक .NET सेवा से jQuery के साथ JSON डेटा प्राप्त करें: AJAX सेटअप से उलझन में] (http://stackoverflow.com/questions/5690882/get-json-data-with-jquery-from-a- नेट-सर्विस-उलझन-एजेक्स-सेटअप) – GSerg

+0

[एसएसएक्स वेब सेवा का संभावित डुप्लिकेट जेएसओएन कैसे वापस करें और एक्सएमएल नहीं?] (https://stackoverflow.com/questions/14950578/asmx-web-service-how- to-return-json-and-not-xml) –

उत्तर

40

मुझे एक ही समस्या का सामना करना पड़ा, और इसे काम करने के लिए नीचे दिए गए कोड को शामिल किया गया।

[WebMethod] 
[ScriptMethod(UseHttpGet=true ,ResponseFormat = ResponseFormat.Json)] 
public void HelloWorld() 
{ 
    Context.Response.Clear(); 
    Context.Response.ContentType = "application/json"; 
    Context.Response.Write("Hello World"); 
    //return "Hello World"; 
} 

अद्यतन:

एक शुद्ध json प्रारूप पाने के लिए आपको नीचे की तरह जावास्क्रिप्ट serializer उपयोग कर सकते हैं।

public class WebService1 : System.Web.Services.WebService 
{ 
    [WebMethod] 
    [ScriptMethod(UseHttpGet=true ,ResponseFormat = ResponseFormat.Json)] 
    public void HelloWorld() 
    { 
     JavaScriptSerializer js = new JavaScriptSerializer(); 
     Context.Response.Clear(); 
     Context.Response.ContentType = "application/json";   
     HelloWorldData data = new HelloWorldData(); 
     data.Message = "HelloWorld"; 
     Context.Response.Write(js.Serialize(data)); 


    } 
} 

public class HelloWorldData 
{ 
    public String Message; 
} 

हालांकि यह जटिल प्रकारों के लिए काम करता है, लेकिन स्ट्रिंग में कोई फर्क नहीं पड़ता है।

+0

प्रिय replaying के लिए thansk लेकिन यह मेरे कोड में काम नहीं कर रहा है .... – MansinhDodiya

+0

क्या आपने वापसी को हटाने का प्रयास किया और इसके बजाय प्रतिक्रिया.write() का उपयोग किया ?? – Saranya

+0

ओके अब यह मुझे जेसन दे रहा है लेकिन शुद्ध नहीं है उदाहरण के लिए मैं एबीसी जैसे पैरामीटर पास करता हूं और यह "एबीसी" लौटाता है लेकिन शुद्ध जेसन {"एबीसी"} – MansinhDodiya

1

बस एक शक। आपको JSON प्रतिक्रिया क्यों नहीं मिल रही है? क्योंकि जब आप क्लाइंट से वेब सेवा का आह्वान करते हैं (मैं एक वेब ब्राउज़र मान रहा हूं, यानी xhr), तो आपको अनुरोध पर सामग्री प्रकार शीर्षलेख निर्दिष्ट करना चाहिए "एप्लिकेशन/जेसन; charset = yourcharset"।

मेरा मानना ​​है कि उपर्युक्त समाधान हमेशा जेसन लौटाता है, इससे कोई फर्क नहीं पड़ता कि क्लाइंट से सामग्री प्रकार क्या निर्दिष्ट है। डॉटनेट एएसएमएक्स फ्रेमवर्क सामग्री-प्रकार हेडर विधि का उपयोग करने की अनुमति देता है, इसलिए ऊपर एक साफ समाधान उपलब्ध होने पर उपरोक्त को हैक के रूप में वर्गीकृत किया जा सकता है।

इसी प्रकार के प्रश्न Return Json Data from ASMX web service

पर यह भी मदद कर सकता है ->http://forums.asp.net/p/1054378/2338982.aspx#2338982

पुनश्च: वर्तमान में स्वीकार जवाब नहीं है: मैं तुम्हें डॉटनैट संस्करण उपयोग कर रहे 4.

0

प्रिय भविष्य पाठकों संभालने हूँ सही तरीका। यह आपको JavaScriptSerializer का उपयोग करने के लिए जोड़ता है और आप एक्सएमएल (या वास्तव में भविष्य में आने वाले किसी भी धारावाहिक प्रारूप) का अनुरोध करने की क्षमता खो देते हैं। "सही तरीके" में भी कम कोड शामिल है!

आप [ScriptService] विशेषता के साथ अपनी सेवा वर्ग को सजाने है - जो तुम हो - तो ASP.NET 3.5+ स्वचालित रूप से JSON के जवाब serialise चाहिए अपने अजाक्स कॉल अनुरोध प्रदान की JSON। जेएसओएन को क्रमबद्ध करने के सुझाव मैन्युअल रूप से गलत हैं, जब तक कि आप न्यूटॉन्सॉफ्ट जैसे एक अलग धारावाहिक का उपयोग नहीं करना चाहते हैं।

आप XML को देख रहे थे निम्न में से एक पता चलता है कि:

  • आप अपने अजाक्स कॉल में JSON अनुरोध नहीं कर रहे हैं - कृपया नीचे दिए गए
  • उदाहरण कोड काम संभवत: कुछ web.config प्रविष्टियों याद कर रहे हैं देखने के अनुसार उत्तर here (अस्वीकरण: मेरे पास इनमें से अधिकतर उत्पादन वेब में नहीं है।config; केवल इन के साथ खेलना शुरू करता है, तो कुछ भी नहीं है और कुछ काम करता है)

यहाँ ASMX वेब सेवा सक्षम एक JSON का एक सरल काम कर उदाहरण है:

<%@ WebService Language="C#" Class="WebService" %> 
using System; 
using System.Collections.Generic; 
using System.Web.Services; 

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.Web.Script.Services.ScriptService] 
public class WebService : System.Web.Services.WebService { 
    [WebMethod] 
    public MyClass Example() 
    { 
     return new MyClass(); 
    } 

    public class MyClass 
    { 
     public string Message { get { return "Hi"; } } 
     public int Number { get { return 123; } } 
     public List<string> List { get { return new List<string> { "Item1", "Item2", "Item3" }; } } 
    } 
} 

जावास्क्रिप्ट यह अनुरोध और प्रतिक्रिया पर कार्रवाई करने के (हम बस यह करना होगा

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Test</title> 
    <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.4.js" type="text/javascript"></script> 
</head> 
<body> 
    <script type="text/javascript"> 
     $.ajax({ 
      type: "POST", 
      url: "WebService.asmx/Example", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      data: "{ }", 
      error: function (XMLHttpRequest, textStatus, errorThrown) { alert(langError + " " + textStatus); }, 
      success: function (msg) { 
       alert(msg.d.Message); 
      } 
     }); 
    </script> 
</body> 
</html> 

HTTP अनुरोध:

POST http://HOST.com/WebService.asmx/Example HTTP/1.1 
Accept: application/json, text/javascript, */*; q=0.01 
Content-Type: application/json; charset=utf-8 
X-Requested-With: XMLHttpRequest 
Referer: http://HOST.com/Test.aspx 
Accept-Language: en-GB,en;q=0.5 
Accept-Encoding: gzip, deflate 
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0) 
Connection: Keep-Alive 
Content-Length: 3 
Host: HOST.com 

{ } 
MyClass.Message से संदेश) के साथ पॉप अप एक जे एस चेतावनी

HTTP प्रतिक्रिया:

HTTP/1.1 200 OK 
Cache-Control: private, max-age=0 
Content-Type: application/json; charset=utf-8 
Server: Microsoft-IIS/8.0 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Date: Tue, 20 Feb 2018 08:36:12 GMT 
Content-Length: 98 

{"d":{"__type":"WebService+MyClass","Message":"Hi","Number":123,"List":["Item1","Item2","Item3"]}} 

परिणाम:

"हाय" एक जे एस पॉपअप में प्रदर्शित होता है।

संबंधित मुद्दे