NewtonJson DateTime 格式序列化

Posted

技术标签:

【中文标题】NewtonJson DateTime 格式序列化【英文标题】:NewtonJson DateTime format serialization 【发布时间】:2015-07-23 08:56:03 【问题描述】:

我正在使用 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 格式。

谢谢大家。

【问题讨论】:

【参考方案1】:

ISO 8601 is default for 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,您可以 use global settings:

JsonConvert.DefaultSettings = () => new JsonSerializerSettings

    DateTimeZoneHandling = DateTimeZoneHandling.Utc
;

或本地设置:

Console.WriteLine(JsonConvert.SerializeObject(DateTime.Now, new JsonSerializerSettings

    DateTimeZoneHandling = DateTimeZoneHandling.Utc
));

【讨论】:

谢谢!而已!我可以将 .Net 标准 DateTime 设置为 UTC 吗?还是我总是需要以编程方式指定它?【参考方案2】:

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

[JsonProperty(ItemConverterType = typeof(CustomDateTimeConverter))]
public DateTime? DateTime1;

class CustomDateTimeConverter : IsoDateTimeConverter

    public CustomDateTimeConverter()
    
        DateTimeFormat = "MM.dd.yyyy";//specify your format
    

【讨论】:

以上是关于NewtonJson DateTime 格式序列化的主要内容,如果未能解决你的问题,请参考以下文章

使用newtonjson解决Json日期格式问题

NewtonJson、NewtonJson开源、NewtonJson开发和NewtonJson技巧

JSON.NET使用简单说明

字定义JSON序列化支持datetime格式序列化

Flutter: DateTime 作为改造方法中的参数; DateTime ISO 8061 序列化;改造日期 iso8061 格式

使用 Json.Net 序列化时指定自定义 DateTime 格式