Making a simple call to a server

  • Earlier this year, before I learnt about Code Review Stack Exchange, I gave this answer in response to a question about how to combine ASP.NET, jQuery, and JSON:

    I keep thinking that there must be a better way to handle the JSON than just using escaped string literals, but I'd like to know for sure.

    urlToHandler = 'handler.ashx';
    jsonData = '{ "dateStamp":"2010/01/01", "stringParam": "hello" }';
    url: urlToHandler,
    data: jsonData,
    dataType: 'json',
    type: 'POST',
    contentType: 'application/json',
    success: function(data) {
    error: function(data, status, jqXHR) {
    alert('There was an error.');
    }); // end $.ajax

    [WebService(Namespace = "")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class handler : IHttpHandler , System.Web.SessionState.IReadOnlySessionState
    public void ProcessRequest(HttpContext context)
    context.Response.ContentType = "application/json";

    DateTime dateStamp = DateTime.Parse((string)Request.Form["dateStamp"]);
    string stringParam = (string)Request.Form["stringParam"];

    // Your logic here

    string json = "{ \"responseDateTime\": \"hello hello there!\" }";

    Thanks for the answer. I was wondering, specifically, if there is a way to improve the client side scripting; a good way to format JSON client side. Supposing that the `dateStamp` and `stringParam` values were not hardcoded, but rather read from a web form, the only way I know to build the JSON is string concatenation, and that's no fun and ugly as sin!

  • brandonc

    brandonc Correct answer

    10 years ago

    You are correct. There is a better way. Starting in .NET 3.5, there is a JavaScriptSerializer class that can be used for simplifying JSON responses. It can be found in the System.Web.Script.Serialization namespace (System.Web.Extensions assembly)

    First, you'd need to make a model to represent your response:

    public class SimpleResponse {
    public string responseDateTime { get; set; }

    public SimpleResponse() {
    responseDateTime = "hello hello there!";

    ...Then in your handler:

     public void ProcessRequest(HttpContext context)
    context.Response.ContentType = "application/json";
    var json = new JavaScriptSerializer();

    json.Serialize(new SimpleResponse())

    Here is the result:

    {"responseDateTime":"hello hello there!"}

    In an ASP.NET MVC application this is more trivial. Just return a JsonResult from your controller:

    public JsonResult Index()
    return Json(new SimpleResponse());

    I've learnt that some special steps need to be taken to deal with DateTime JSON serialization. I wrote about it on my personal web site:

License under CC-BY-SA with attribution

Content dated before 7/24/2021 11:53 AM