除了自定义DateTimeConverterBase
实现之外,有没有办法防止Json.NET 4.5+在设置为使用DateFormatHandling.MicrosoftDateFormat
时,为它提供的任何非UTC DateTime
附加时区偏移量?
"\/Date(1333645844276-0600)\/"
详细信息
我正在将一个应用编程接口项目从使用内置的JSON JavaScriptSerializer
切换到使用Json.NET来生成.NET。在Json.NET中,对于UTC DateTime
,默认的datetime序列化类似于.NET版本:
"\/Date(1333645844276)\/"
对于非协调世界时,与JavaScriptSerializer
不同,Json.NET将时区偏移量附加到结果中(对于我所在的地区,每年的这个时候为-6):
"\/Date(1333645844276-0600)\/"
下面是我用来将Json.NET 4.5+切换回\/Date(...)\/
格式(称为MicrosoftDateFormat
)的代码:
JsonSerializerSettings customJsonSettings = new JsonSerializerSettings() {
DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
};
string result = JsonConvert.SerializeObject(DateTime.Now, customJsonSettings);
解决方案看起来就像告诉Json.NET使用不同的DateTimeZoneHandling
设置一样简单。我尝试了DateTimeZoneHandling
的每种设置(Local
、Utc
、Unspecified
和RoundtripKind
),它们都在输出中保留了"-0600“。事实上,对于非UTC DateTime
,它们都会产生相同的结果。
JsonSerializerSettings customJsonSettings = new JsonSerializerSettings() {
DateFormatHandling = DateFormatHandling.MicrosoftDateFormat,
DateTimeZoneHandling = DateTimeZoneHandling.Utc
};
string result = JsonConvert.SerializeObject(DateTime.Now, customJsonSettings);
"\/Date(1333647855743-0600)\/"
注意事项
理想情况下,我应该已经在UTC度过了所有的时间。我当然计划在此API的下一个版本中做到这一点。由于这是一个实时API,因此在发布新版本之前,不值得冒更改输出的风险。对于大多数JSON解析系统来说,这似乎不是问题,但我不能冒险进行更改,因为JSON标准并没有正式规定任何关于日期序列化的内容。
https://stackoverflow.com/questions/10033612
复制相似问题