我目前正在尝试在我简单的asp.net网站上实现精彩的jQuery插件'周历'(here)。我已经设置了几个[WebMethods]来向日历发送数据并响应客户端事件(创建事件,修改事件等)。
使用WebMethods时,asp.net的对象自动序列化似乎在发送数据时效果很好,但是当发生相反的情况时,我遇到了问题。将日历事件发送回服务器的有问题的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原语:start。
在服务器上,我的事件对象按如下方式组成:
[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; }
}
答案 0 :(得分:0)
按如下方式修改对Web服务的调用可以解决问题:
$.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.stringify函数摆弄发送到服务器的JSON格式