Десериализация даты JSON на сервере (asp.net) - PullRequest
0 голосов
/ 18 ноября 2009

В настоящее время я пытаюсь реализовать замечательный плагин jQuery 'календарь недели' ( здесь ) на моем простом веб-сайте asp.net. Я настроил пару [WebMethods] для отправки данных в календарь и для ответа на события на стороне клиента (создание событий, изменение событий и т. Д.).

Автоматическая сериализация объектов asp.net при использовании WebMethods, кажется, хорошо работает при отправке данных обратно, но когда происходит обратное, я сталкиваюсь с проблемами.

Рассматриваемый код JavaScript, который отправляет событие календаря обратно на сервер:

save: function() {
                    calEvent.id = id;
                    id++;
                    calEvent.start = new Date(startField.val());
                    calEvent.end = new Date(endField.val());
                    calEvent.title = titleField.val();
                    calEvent.body = bodyField.val();

                    $calendar.weekCalendar("removeUnsavedEvents");
                    $calendar.weekCalendar("updateEvent", calEvent);
                    $dialogContent.dialog("close");
                    //SAVE TO DATABASE

                    $.ajax({
                        type: "POST",
                        url: "Tracker.aspx/AddEvent",
                        data: calEvent,
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function(data) {
                            alert("saved");
                        }
                    });

В настоящее время у меня просто есть «метод-заглушка» на сервере, чтобы проверить, работает ли десериализация:

[WebMthod]    
public static string AddEvent(Event e)
        {
            //save event to database and return something
            return "done";
    }

Однако я добавляю следующее исключение при добавлении события:

Недопустимый примитив JSON: начало.

На сервере мой объект события составлен следующим образом:

[DataContract]
public class Event
{
    [DataMember]
    public int id { get; set; }
    [DataMember]
    public string title { get; set; }
    [DataMember]
    public string body { get; set; }
    [DataMember]
    public string start { get; set; }
    [DataMember]
    public string end { get; set; }
}

1 Ответ

0 голосов
/ 18 ноября 2009

Изменение вызова веб-службы следующим образом сделало трюк:

$.ajax({
                        type: "POST",
                        url: "Tracker.aspx/AddEvent",
                        data: '{e : ' + JSON.stringify(calEvent) + '}',
                        contentType: "application/json; charset=utf-8",
                        dataType: "text",
                        success: function(data) {
                            alert("saved");
                        }
                    });

Просто пришлось поиграться с форматом JSON, отправляемого на сервер, используя функцию JSON.stringify

...