DateTimeConverterBase缺少自定义实现,是否有一些方法可以保留Json.NET 4.5+,当设置为使用时DateFormatHandling.MicrosoftDateFormat,为任何非UTC提供时区偏移量DateTime?
"\/Date(1333645844276-0600)\/"
Run Code Online (Sandbox Code Playgroud)
我正在将API项目从使用内置.NET转换JavaScriptSerializer为使用Json.NET生成JSON.在Json.NET中,对于UTC DateTime,默认的日期时间序列化类似于.NET版本:
"\/Date(1333645844276)\/"
Run Code Online (Sandbox Code Playgroud)
对于非UTC,不像JavaScriptSerializer,Json.NET在结果中附加时区偏移量(对于我的区域,每年的这个时间为-6):
"\/Date(1333645844276-0600)\/"
Run Code Online (Sandbox Code Playgroud)
这是我用来将Json.NET 4.5+切换回\/Date(...)\/格式(称为MicrosoftDateFormat)的代码:
JsonSerializerSettings customJsonSettings = new JsonSerializerSettings() {
DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
};
string result = JsonConvert.SerializeObject(DateTime.Now, customJsonSettings);
Run Code Online (Sandbox Code Playgroud)
解决方案似乎就像告诉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)\/"
Run Code Online (Sandbox Code Playgroud)
理想情况下,我已经拥有UTC的所有时间.我当然计划使用此API的下一个版本.由于这是一个实时API,因此在发布新版本之前,不值得冒输出更改.对于大多数JSON解析系统来说,它似乎不是一个问题,但我不能冒这个改变的风险,因为JSON标准没有正式说明日期序列化.
joh*_*ohv 11
对我来说似乎工作得很好,见下文.我的JSON.NET程序集说它的版本是"4.5.0.0".
JsonSerializerSettings customJsonSettings = new JsonSerializerSettings()
{
DateFormatHandling = DateFormatHandling.MicrosoftDateFormat,
DateTimeZoneHandling = DateTimeZoneHandling.Utc
};
string result = JsonConvert.SerializeObject(DateTime.Now, customJsonSettings);
Console.WriteLine(result); // "\/Date(1344249339881)\/"
Run Code Online (Sandbox Code Playgroud)
也许这是一个已修复的错误?
明确创建日期:
var x = new { thedate = new DateTime(2009, 2, 15, 0, 0, 0, DateTimeKind.Local) };
Console.WriteLine(JsonConvert.SerializeObject(x,
new JsonSerializerSettings() {
DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
}));
// {"thedate":"\/Date(1234652400000+0100)\/"}
Console.WriteLine(JsonConvert.SerializeObject(x,
new JsonSerializerSettings() {
DateFormatHandling = DateFormatHandling.MicrosoftDateFormat,
DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc
}));
// {"thedate":"\/Date(1234652400000)\/"}
Console.WriteLine(JsonConvert.SerializeObject(x,
new JsonSerializerSettings() {
DateFormatHandling = DateFormatHandling.MicrosoftDateFormat,
DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Local
}));
// {"thedate":"\/Date(1234652400000+0100)\/"}
Run Code Online (Sandbox Code Playgroud)
小智 5
我找到了一个解决方案来删除DateTime最新版本 9.0.0 的时区偏移:
var time = DateTime.Now;
Console.WriteLine(JsonConvert.SerializeObject(time, new JsonSerializerSettings()
{
DateFormatHandling = DateFormatHandling.IsoDateFormat,
DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Unspecified
}));
//"{"thedate": "2016-12-15T09:20:00.9375403"};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10826 次 |
| 最近记录: |