BCL の DateTime と比較した NodaTime のプロトタイプ プロジェクトを作成していますが、この結果を実行すると recursionLimit exceeded エラーが発生します。
これは、ビューモデルを JSON 化するために使用している関数です。この関数が戻った後にエラーが発生します。
[HttpPost]
public JsonResult GetDates(int numOfDatesToRetrieve)
{
List<DateTimeModel> dateTimeModelList = BuildDateTimeModelList(numOfDatesToRetrieve);
JsonResult result = Json(dateTimeModelList, JsonRequestBehavior.AllowGet);
return result;
}
私のビューモデルは、私が調べたときに正しく構築されています。これが私のビューモデルのコードです。
public class DateTimeModel
{
public int ID;
public LocalDateTime NodaLocalDateTimeUTC;
public LocalDateTime NodaLocalDateTime
{
get
{
DateTimeZone dateTimeZone = DateTimeZoneProviders.Bcl.GetZoneOrNull(BCLTimezoneID);
//ZonedDateTime zonedDateTime = NodaLocalDateTimeUTC.InUtc().WithZone(dateTimeZone);
OffsetDateTime offsetDateTime = new OffsetDateTime(NodaLocalDateTimeUTC, Offset.Zero);
ZonedDateTime zonedDateTime = new ZonedDateTime(offsetDateTime.ToInstant(), dateTimeZone);
return zonedDateTime.LocalDateTime;
}
}
public OffsetDateTime NodaOffsetDateTime;
public DateTime BclDateTimeUTC;
public DateTime BclLocalDateTime
{
get
{
DateTime utcDateTime = DateTime.SpecifyKind(BclDateTimeUTC, DateTimeKind.Utc);
TimeZoneInfo nzTimeZone = TimeZoneInfo.FindSystemTimeZoneById(BCLTimezoneID);
DateTime result = TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, nzTimeZone);
return result;
}
}
public DateTimeOffset BclDateTimeOffset;
//public int Offset;
public string OriginalDateString;
public string BCLTimezoneID;
}
viewModel のコードにコメントを付けると JsonResult を実行できるため、NodaTime オブジェクトが正しくシリアル化されていないと確信しています。
このページからこれを読みましたNodaTime API リファレンス
この名前空間のコードは、現在 Noda Time NuGet パッケージには含まれていません。それはまだ「実験的」とみなされます。これらのシリアライザーを使用するには、プロジェクトのホームページから Noda Time のソース コードをダウンロードしてビルドしてください。
そのため、ソース コードをダウンロードしてビルドし、dll のプロジェクト参照を置き換えましたが、JsonSerialization クラスを実装する方法がわかりません。
NodaTime.Serialization.JsonNet クラスを使用して NodaTime オブジェクトをシリアライズ可能にする方法を誰かに説明してもらえますか?