36

JSON.NET を使用して、オブジェクト インスタンスから直接 DateTime 値をシリアル化しています (フォーマッタで DateTime.ToString() を使用していません)。

DateTime のミリ秒コンポーネントがゼロであっても、シリアル化にミリ秒を含めるように JSON.NET を強制する方法はありますか?

背景: この JSON エンドポイントの Web サービス コンシューマが非常に遅いです。条件付きロジックは消費者にとってコストがかかるため、毎回同じデータ形式を提供したいと考えています。

4

3 に答える 3

59

現在のプロジェクトでこの同じ問題に遭遇しました。REST API を実装するために Web API (したがって JSON.Net) を使用しています。オブジェクトをシリアル化するときに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);

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

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

于 2013-08-12T20:27:28.117 に答える