【问题标题】:Newtonsoft.Json customize date serializationNewtonsoft.Json 自定义日期序列化
【发布时间】:2016-11-11 14:01:35
【问题描述】:

我正在使用Newtonsoft.Json 将我的日期从 C# 序列化为 JSON。我想要做的是让 json 序列化程序使用当前的文化将日期格式化为字符串。

这是我的 Json 序列化程序得到的结果:

JsonConvert.SerializeObject(DateTime.Now);

结果是:

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

但我更喜欢的是:

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

因为我目前的文化是巴西,我希望我的日期以上述方式显示。

是否有可能全局(对于任何可能被序列化的日期)告诉 Newtonsoft.Json 中的 json 序列化程序使用就像它正在执行 date.ToString() 一样(因为 ToString 尊重System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat 并相应地给出正确的格式)

【问题讨论】:

标签: c# json serialization json.net


【解决方案1】:

您需要将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 等),所以你如何全局设置它可能会有所不同。

【讨论】:

  • 我正在使用MVC6,你知道我可以将代码放在哪里,以便它适用于所有json。我把它放在startup.cs方法configure但它不起作用。
  • JsonConvert.DefaultSettings = new JsonSerializerSettings { ... }
【解决方案2】:

是的,您可以在 JsonSerializer 设置中使用转换器。

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());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-16
    • 2015-01-30
    • 2017-06-23
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多