1. ホーム
  2. c#

[解決済み] Json.Netでシリアライズする際のカスタムDateTimeフォーマットの指定について

2022-04-30 08:40:50

質問

ASP.NET Web APIを使用して、あるデータを公開するAPIを開発しています。

あるAPIで、クライアントは日付を yyyy-MM-dd の形式を使用します。グローバルな設定(例えば GlobalConfiguration.Configuration.Formatters.JsonFormatter というのは、このクライアントに非常に特化しているからです。そして、私は複数のクライアントのためのソリューションでそれを開発しています。

私が思いついた解決策の1つは、カスタムの JsonConverter そしてそれをカスタムフォーマットするために必要なプロパティに配置します。

class ReturnObjectA 
{
    [JsonConverter(typeof(CustomDateTimeConverter))]
    public DateTime ReturnDate { get;set;}
}

ただ、他に何か簡単な方法はないでしょうか。

どのように解決するのですか?

あなたは正しい道を歩んでいます。 グローバル設定を変更できないとのことですので、次善の策として JsonConverter 属性は、ご指摘の通り、必要に応じて使用します。 Json.Netには、すでにビルトインの IsoDateTimeConverter を使用すると、日付の書式を指定することができます。 残念ながら、書式は JsonConverter 属性の唯一の引数が型であるためです。 しかし、簡単な解決策があります。 IsoDateTimeConverter そして、そのサブクラスのコンストラクタで日付の書式を指定します。 サブクラスのコンストラクタに JsonConverter 属性を必要に応じて設定し、カスタム・コンバータを指定すれば、準備は完了です。 以下は、必要なコードの全体像である。

class CustomDateTimeConverter : IsoDateTimeConverter
{
    public CustomDateTimeConverter()
    {
        base.DateTimeFormat = "yyyy-MM-dd";
    }
}

時刻を表示しても構わないのなら、IsoDateTimeConverter をサブクラス化する必要はない。そのデフォルトの日付書式は yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK (この例では ソースコード ).