Asp.net 使用默认序列化程序从WebAPI返回DateTime Json

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,

我知道这个问题已经被多次讨论过了,我读了很多关于这个问题的帖子,但仍然感到困惑

使用MVC4/WebAPI,我有一个datetime,它被简单地创建为new datetime.Now

我的WebAPI返回的数据如下:

 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转换,还进行了一些黑客攻击