DateTime をシリアル化するときに JSON.NET にミリ秒を含めるように強制する (ms コンポーネントがゼロの場合でも) 質問する

DateTime をシリアル化するときに JSON.NET にミリ秒を含めるように強制する (ms コンポーネントがゼロの場合でも) 質問する

私は 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);

JsonSerializerSettingsWeb API を使用していない場合は、 の新しいインスタンスを作成し、IsoDateTimeConverter上記のように を追加して、シリアライザー設定を に渡すことで、同じことを行うことができますJsonConvert.SerializeObject()

注意:DateTimeOffsetまたはローカルをシリアル化しDateTimeてタイムゾーンオフセットを含める場合は、'Z'上記の形式の引用符付き を引用符なし に置き換えますKカスタム日付と時刻の書式設定文字列詳細についてはドキュメントをご覧ください。

おすすめ記事