Сделав простой звонок на сервер


В начале этого года, прежде чем я узнал о коде обзор стека обмен, я дал этот ответ в ответ на вопрос о том, как совместить ASP.NET на jQuery и JSON:

Я продолжаю думать, что там должен быть лучший способ для обработки JSON, чем просто сбежал, используя строковые литералы, но я хочу знать наверняка.

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


[WebService(Namespace = "http://tempuri.org/")]
[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!\" }";
        context.Response.Write(json);    
    }


64882
12
задан 29 июня 2011 в 10:06 Источник Поделиться
Комментарии
1 ответ

Вы правы. Есть лучший путь. Начиная с версии .Net 3.5 С, есть класс javascriptserializer класс, который может быть использован для упрощения формате JSON ответы. Он может быть найден в системе.Веб.Сценарий.Сериализация пространство имен (системы.Веб.Расширения сборки)

Во-первых, нужно сделать модель, чтобы представить свой ответ:

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

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

...Затем в обработчике:

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

context.Response.Write(
json.Serialize(new SimpleResponse())
);
}

Вот результат:

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

В приложении ASP.NET в MVC это более тривиальный. Просто вернуть JsonResult из своего контроллера:

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

8
ответ дан 30 июня 2011 в 06:06 Источник Поделиться