Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 906 Vote(s) - 3.5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How to return JSON from a 2.0 asmx web service

#1
I am using .Net framework 2.0 / jQuery to make an Ajax call to a 2.0 web service. No matter what I set the contentType to in the ajax call, the service always returns XML. I want it to return Json!

Here is the call:

$(document).ready(function() {
$.ajax({
type: "POST",
url: "DonationsService.asmx/GetDate",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
// Hide the fake progress indicator graphic.
$('#RSSContent').removeClass('loading');

// Insert the returned HTML into the <div>.
$('#RSSContent').html(msg.d);
}
});
});

Here is what the request header looks like in Fiddler:

POST /DonationsService.asmx/GetDate HTTP/1.1
x-requested-with: XMLHttpRequest
Accept-Language: en-us
Referer:

[To see links please register here]

Accept: application/json, text/javascript, */*
Content-Type: application/json; charset=utf-8
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; eMusic DLM/4; .NET CLR 2.0.50727)
Host: localhost:1238
Content-Length: 2
Connection: Keep-Alive
Pragma: no-cache

I have tried setting the contentType to 'text/json' and get the same results.

Here is the web service method:

<WebMethod()> _
Public Function GetDate() As String

'just playing around with Newtonsoft.Json
Dim sb As New StringBuilder
Dim sw As New IO.StringWriter(sb)
Dim strOut As String = String.Empty

Using jw As New JsonTextWriter(sw)
With jw
.WriteStartObject()
.WritePropertyName("DateTime")
.WriteValue(DateTime.Now.ToString)
.WriteEndObject()
End With
strOut = sw.ToString
End Using

Return strOut

End Function

and here is what it returns:

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://DMS.Webservices.org/">{"DateTime":"11/13/2008 6:04:22 PM"}</string>

Does anyone know how to force the web service to return Json when I ask for Json?

Please don't tell me to upgrade to .Net Framework 3.5 or anything like that (I'm not that stupid). I need a 2.0 solution.
Reply

#2
You probably can't do anything other than XML or binary serialization in .NET 2.0. If you're not using an autogenerated web reference then don't bother with ASMX. Just use an ASPX or ASHX instead.
Reply

#3
I may not be 100% correct on this but I'm sure .net webservices are XML/SOAP based.

You would need to override the default behavior of the webservice. I'm not entirely sure that this would even be possible.

I know this won't be the most useful answer, but may get you headed in the right direction.
Reply

#4
You need to decorate your web method with the following:

[ScriptMethod(ResponseFormat = ResponseFormat.Json)]

You've got the rest right :)<br /><br />
More info at [Encosia](

[To see links please register here]

) and [Andrew Roland's Blog](

[To see links please register here]

)

EDIT: As noted below this is .NET 3.5 only (I was unaware of this, my bad).
Reply

#5
You can use the [Jayrock library][1]
[Quick start for asp.net][2]

This allows you to write a http handler to return you json.

<%@ WebHandler Class="JayrockWeb.HelloWorld" %>

namespace JayrockWeb
{
using System;
using System.Web;
using Jayrock.Json;
using Jayrock.JsonRpc;
using Jayrock.JsonRpc.Web;

public class HelloWorld : JsonRpcHandler
{
[ JsonRpcMethod("greetings") ]
public string Greetings()
{
return "Welcome to Jayrock!";
}
}
}


[1]:

[To see links please register here]

[2]:

[To see links please register here]

Reply

#6
It's no problem to [return JSON from ASMX services in ASP.NET 2.0][1]. You just need the ASP.NET AJAX Extensions installed.

Do be sure to add the [ScriptService] decoration to your web service. That's what instructs the server side portion of the ASP.NET AJAX framework to return JSON for a properly formed request.

Also, you'll need to drop the ".d" from "msg.d" in my example, if you're using it with 2.0. [The ".d" is a security feature that came with 3.5][2].


[1]:

[To see links please register here]

[2]:

[To see links please register here]

Reply

#7
The response is wrapped in a <string> element because you're method says it will return a string. You could use this to be able to send plain json, but your wsdl will be fooled (the function is void but does respond data).

[WebMethod(Description="return pure JSON")]
public void retrieveByIdToPureJSON( int id )
{
Context.Response.Write( JsonConvert.SerializeObject( mydbtable.getById(id) );
}

Good luck, tom

Btw: see Newtonsoft.Json for JsonConvert
Reply

#8
It's also possible to just write up your own quick JSON converter using Refelction.

Dim sb As New StringBuilder("{")
For Each p As PropertyInfo In myObject.GetType().GetProperties()
sb.Append(String.Format("""{0}"":""{1}"",", p.Name, p.GetValue(myObject,
Nothing).ToString()))
Next p

//remove the last "," because it's uneeded.
sb.Remove(sb.Length - 1, 1)

sb.Append("}")
Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through