Asp.net 使用默认序列化程序从WebAPI返回DateTime Json
我知道这个问题已经被多次讨论过了,我读了很多关于这个问题的帖子,但仍然感到困惑 使用MVC4/WebAPI,我有一个datetime,它被简单地创建为new datetime.Now 我的WebAPI返回的数据如下:Asp.net 使用默认序列化程序从WebAPI返回DateTime Json,asp.net,asp.net-web-api,Asp.net,Asp.net Web Api,我知道这个问题已经被多次讨论过了,我读了很多关于这个问题的帖子,但仍然感到困惑 使用MVC4/WebAPI,我有一个datetime,它被简单地创建为new datetime.Now 我的WebAPI返回的数据如下: HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, new { data = sessionRecordSmalls,
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, new
{
data = sessionRecordSmalls,
count = sessionRecordSmalls.Count,
success = true
});
其中sessionRecordsSmall具有DateTime的公共属性
当我在VS调试器中查看日期时,它显示为现在,当然没有时区,因为DateTime不包括时区
{10/6/2012上午9:45:00}
当我查看从服务器下载的内容时,我看到了JSON
2012-10-06T09:45:00
我认为T0表示时区0,但不是100%确定。我的JavaScript库将其解释为时区0,然后将实际下载日期显示为GMT(-9小时前)
我的问题是,下载的JSON是什么?包括时区吗?我在这里遗漏了一些重要的步骤吗?日期时间
2012-10-06T09:45:00
,我们使用JSON和Web API接收该日期时间,默认序列化程序为格式
其实这就是所谓的。摘录:
…单个时间点可以通过连接
完整的日期表达式,字母T作为分隔符,以及有效的
时间表达式。例如“2007-04-05T14:30”
此格式中没有时区信息。如摘录所述:
ISO 8601中的时区表示为本地时间(带
位置(未指定),如UTC或UTC的偏移量。如果没有UTC
关系信息以时间表示,时间为
假设是在当地时间
换句话说,如果未指定UTC的偏移量,则将其视为本地时间
将在末尾用Z
扩展
如果时间以UTC为单位,则在时间后直接添加一个Z,而不使用符号
空间Z是UTC零偏移的区域标识符。“UTC 09:30”
因此表示为“09:30Z”或“0930Z”。“14:45:15 UTC”将
为“14:45:15Z”或“144515Z”
UTC时间也称为“Zulu”时间,因为“Zulu”是北约拼音字母表中“Z”的意思
因此,我们收到的日期时间是ISO 8601格式,被视为本地时区(结尾处没有类似于此的
2012-10-06T09:45:00Z
)如果使用json.net序列化,请记住您可以指定
WebApiConf.cs中的示例
var json = config.Formatters.JsonFormatter;
json.SerializerSettings.DateTimeZoneHandling =Newtonsoft.Json.DateTimeZoneHandling.Local;
我注意到,当我用:[JsonProperty(ItemConverterType=typeof(JavaScriptDateTimeConverter))]public datetime LogDate{get;set;}装饰我的日期时间时,我得到了我期望的转换结果,这是否应该是默认值?老实说,我不确定。。。但是我建议你读一下这个。。。我正在进行UTC转换,还进行了一些黑客攻击