私は現在、単純なasp.net WebサイトにすばらしいjQueryプラグイン「週カレンダー」(ここ)を実装しようとしています。カレンダーにデータを送信し、クライアント側のイベント(イベントの作成、イベントの変更など)に応答するために、いくつかの[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プリミティブ:開始。
サーバーでは、イベントオブジェクトは次のように構成されています。
[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; }
}