MVC 4の新しいシングルページアプリケーションツールを試してみたところ、私が見つけた例のいずれにも、WebApiを介して更新されたDateTimeの例が含まれていないことに気付きました。私はすぐにその理由を知りました。
提供されたテンプレートから標準SPAを生成することから始めました。次に、TodoItem.csを開き、DateTimeフィールドを追加しました。次に、コメントの指示に従ってコントローラーを生成しました。(日時フィールドがない場合、すべてが正常に機能します)。
すべてが生成された後、アプリを起動し、コントローラーインデックスに移動しました(コントローラーを「タスク」と呼びました)。期待どおりに0レコードのグリッドページを取得し、追加ボタンをクリックしました。期待どおりに編集ページに移動し、光沢のある新しい日時フィールドに日付を含むいくつかのデータを入力しました。次に、[保存]をクリックしました。
次のようなエラーが発生しました。
サーバーエラー:HTTPステータスコード:500、メッセージ:タイプSystem.Web.Http.Data.ChangeSetEntry[]のオブジェクトの逆シリアル化中にエラーが発生しました。DateTimeコンテンツ「01/01/2012」は、JSONで必要な「/ Date(」で始まり、「)/」で終わるわけではありません。
ツールはまだDateTimeをサポートしていないようです。私はそれを理解して機能させるために少し時間を費やすことができると確信していますが、すでにこの問題を修正して洞察を提供できる誰かとここで少し運が見つかるかもしれないと思いました。
誰かがすでにこれと戦った?
更新:これを尋ねてから見つけた情報をさらに追加しています。以下に示すように、フォーマッターとしてJSON.Netを使用してみました。それが最終的な解決策になると思いますが、以下のポスターが推奨するようにするだけでは十分ではありません。
JSON.Netシリアライザーを使用すると、次のエラーが発生します。
このDataControllerは、エンティティ「JObject」の操作「Update」をサポートしていません。
その理由は、JSON.Netが、フォーマッターが脱セラリゼーションしようとしているオブジェクト(System.Web.Http.Data.ChangeSet)に完全にデータを入力しないためです。
送信されるjsonは次のとおりです。
[{"Id":"0",
"Operation":2,
"Entity":
{"__type":"TodoItem:#SPADateProblem.Models",
"CreatedDate":"/Date(1325397600000-0600)/",
"IsDone":false,
"Title":"Blah",
"TodoItemId":1},
"OriginalEntity":
{"__type":"TodoItem:#SPADateProblem.Models",
"CreatedDate":"/Date(1325397600000-0600)/",
"IsDone":false,
"Title":"Blah",
"TodoItemId":1}
}]
組み込みのJsonFormatterは、このJsonをChangeSetオブジェクトに再構成し、EntityフィールドとOriginalEntityフィールドにTodoItemオブジェクトを埋め込むことができます。
誰かがこれを適切に逆シリアル化するためにJSON.Netを入手しましたか?