私は JSON.NET を使用して、オブジェクト インスタンスから DateTime 値を直接シリアル化しています (フォーマッタで DateTime.ToString() は使用していません)。
DateTime のミリ秒コンポーネントがゼロの場合でも、JSON.NET でシリアル化にミリ秒を強制的に含める方法はありますか?
背景: この JSON エンドポイントには非常に遅い Web サービス コンシューマーがあります。条件付きロジックはコンシューマーにとってコストがかかるため、毎回同じデータ形式を提供したいと思います。
ベストアンサー1
現在のプロジェクトでも同じ問題に遭遇しました。Web API (つまり JSON.Net) を使用して REST API を実装しています。DateTime
オブジェクトをシリアル化するときに、JSON.Net はミリ秒の末尾のゼロを省略するか、日付がゼロの場合はミリ秒を完全に省略することがわかりました。クライアントは、ミリ秒が正確に 3 桁の固定長の日付時刻文字列を期待していました。 で次の操作を実行してこれを修正しましたApplication_Start()
。
JsonSerializerSettings settings = HttpConfiguration.Formatters.JsonFormatter.SerializerSettings;
IsoDateTimeConverter dateConverter = new IsoDateTimeConverter
{
DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.fff'Z'"
};
settings.Converters.Add(dateConverter);
JsonSerializerSettings
Web API を使用していない場合は、 の新しいインスタンスを作成し、IsoDateTimeConverter
上記のように を追加して、シリアライザー設定を に渡すことで、同じことを行うことができますJsonConvert.SerializeObject()
。
注意:DateTimeOffset
またはローカルをシリアル化しDateTime
てタイムゾーンオフセットを含める場合は、'Z'
上記の形式の引用符付き を引用符なし に置き換えますK
。カスタム日付と時刻の書式設定文字列詳細についてはドキュメントをご覧ください。