NewtonJson DateTime格式序列化

本文关键字:序列化 格式 DateTime NewtonJson | 更新日期: 2023-09-27 18:04:17

我使用NewtonJson.NET将类反序列化为json格式。

我不知道为什么,但它序列化了DateTime值,例如:2015-07-23T10:39:31.0017599+02:00

我的服务器理解ISO8601格式:yyyy-MM-dd'T'HH:mm:ss.SSSZ

我想问题出在毫秒SSS部分。

我该怎么改?

我需要将此配置设置为全局表单,因此,例如,在每个字段中都没有。我希望NewtonJson始终将DateTime值序列化为ISO8601格式。

谢谢大家。

NewtonJson DateTime格式序列化

ISO 8601是Json.NET自4.5版本以来的默认值。您得到的和想要的都是ISO 8601,在后一种情况下,Z意味着时间以UTC表示:

// This is equal to 2015-07-23T12:22:17.7902881+03:00
JsonConvert.SerializeObject(DateTime.Now);
// This is equal to 2015-07-23T09:22:18.0585302Z
JsonConvert.SerializeObject(DateTime.UtcNow);

要告诉Json.NET将DateTime解释为UTC,可以使用全局设置:

JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
    DateTimeZoneHandling = DateTimeZoneHandling.Utc
};

或本地设置:

Console.WriteLine(JsonConvert.SerializeObject(DateTime.Now, new JsonSerializerSettings
{
    DateTimeZoneHandling = DateTimeZoneHandling.Utc
}));

您可以指定格式转换器,例如通过注释属性:

[JsonProperty(ItemConverterType = typeof(CustomDateTimeConverter))]
public DateTime? DateTime1;
class CustomDateTimeConverter : IsoDateTimeConverter
{
    public CustomDateTimeConverter()
    {
        DateTimeFormat = "MM.dd.yyyy";//specify your format
    }
}