NewtonJson DateTime格式序列化

时间:2015-07-23 08:56:03

标签: c# datetime json.net

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

谢谢大家。

2 个答案:

答案 0 :(得分:1)

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

Dispatcher

答案 1 :(得分: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
}));