| ■No102101 (あああ さん) に返信
ちょっと試してみました。
No102107 で、
>>var jsonString = JsonSerializer.Serialize(eventData, options);
>>return Json(jsonString,JsonRequestBehavior.AllowGet);
>
> 1 行目で System.Text.Json 名前空間の JsonSerializer クラスを使って JSON 文字列
> にシリアライズして、それを 2 行目で MVC5 の Json メソッド (Newtonsoft.JSON を使
> っているはず) でもう一回 JSON 文字列にシリアライズしています。何か意味があるの
> ですか?
>
> Fullcarendar は自分は触ったこともないの分かりませんが、渡すデータの形式 (特に
> 日時) は仕様に合っているのでしょうか?
と書きましたが、原因はやはりその 2 点のようです。
どのように直せばいいかと言うと、前者については jsonString をそのまま以下のようにし
て返せばいいです。
// シリアライズ
var jsonString = JsonSerializer.Serialize(eventData, options);
Response.ContentType = "application/json; charset=utf-8";
return Content(jsonString);
後者については、魔界の仮面弁士さんが書かれたように、大文字小文字の問題です。
質問者さんのコードで以下のところのコメントアウトを外せば小文字になります。
// プロパティ名をキャメルケースに変換
//PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
検証に使った GetEvents メソッドのコードを以下に載せておきます。
public ActionResult GetEvents()
{
var eventData = new List<EventModel>
{
new EventModel
{
Id = "1",
Title = "イベント",
Start = new DateTime(2023,7,2,0,0,0),
End = new DateTime(2023,7,3,0,0,0)
},
new EventModel
{
Id = "2",
Title = "イベント",
Start = new DateTime(2023,7,4,0,0,0),
End = new DateTime(2023,7,5,0,0,0)
}
};
// これは日付の JSON 文字列の形式が "\/Date(1688223600000)\/" になるのでダメ
//return Json(model, JsonRequestBehavior.AllowGet);
var options = new JsonSerializerOptions
{
// 日本語を変換するためのエンコード設定
Encoder = JavaScriptEncoder.Create(UnicodeRanges.All),
// プロパティ名をキャメルケースに変換
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
// インデントを付ける
WriteIndented = true
};
// シリアライズ
var jsonString = JsonSerializer.Serialize(eventData, options);
Response.ContentType = "application/json; charset=utf-8";
return Content(jsonString);
} |