現在のプロジェクトでこの同じ問題に遭遇しました。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
。詳細については、ドキュメントのカスタムの日付と時刻の書式文字列を参照してください。