web-dev-qa-db-ja.com

Newtonsoft.Jsonによるシリアル化の日付のカスタマイズ

私はNewtonsoft.Json_を使用してC#からjavscriptに日付をシリアル化しますjsonシリアライザーが日付を文字列にフォーマットするために現在のカルチャを使用することです

Jsonシリアライザーで得られるものは次のとおりです。

_JsonConvert.SerializeObject(DateTime.Now);
_

結果は次のとおりです。

_"2016-07-08T17:10:17.6722753-05:00"
_

しかし、私が好むのは:

_"08/07/2016 17:10:57"
_

私の現在の文化はブラジルであり、日付を上記の方法で表示したいので。

Globally(シリアル化される可能性のある日付に対して)Newtonsoft.Jsonのjsonシリアライザーに、date.ToString()(ToStringがカルチャを尊重するため、 _System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat_で適切な形式を提供します)

12
Amete Blessed

JsonSerializerSettings.DateFormatString を希望の形式に設定する必要があります。

var jsonSettings = new JsonSerializerSettings();
jsonSettings.DateFormatString = "dd/MM/yyy hh:mm:ss";

string json = JsonConvert.SerializeObject(someObject, jsonSettings);

その後、シリアライザーを使用するたびに設定オブジェクトを渡すか、dbcによって参照される answer の手順に従うことができます。ただし、これが実行されている場所(ASP.NET、デスクトップ、UWPなど)については言及していません。そのため、グローバルに設定する方法は異なる場合があります。

28
Devin Goble

はい、JsonSerializer設定でConverterを使用できます。

public class SpecialDateTimeConverter : DateTimeConverterBase
    {
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            throw new NotImplementedException();
        }

        public override void WriteJson(JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer)
        {
             writer.WriteValue(((DateTime)value).ToString("dd/MM/yyyy hh:mm:ss"));
        }
    }

    string convertedDateTime = JsonConvert.SerializeObject(DateTime.Now, Formatting.Indented, new SpecialDateTimeConverter());
1
Lockdowne