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

Pet*_*ner 12 asp.net asp.net-web-api

我知道这个问题已被多次删除,我读了很多关于该哈希的帖子,但仍然感到困惑.

使用MVC4/WebAPI,我有一个日期时间,只是创建为新的DateTime.Now.

我的WebAPI是这样的返回数据:

 HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, new
            {
                data = sessionRecordSmalls,
                count = sessionRecordSmalls.Count,
                success = true
            });
Run Code Online (Sandbox Code Playgroud)

其中sessionRecordsSmall的公共属性为DateTime.

当我在VS调试器中查看日期时,它现在显示为没有时区,因为DateTime不包含时区.

{10/6/2012 9:45:00 AM}

当我查看从服务器下载的内容时,我会在JSON中看到

2012-10-06T09:45:00

我认为T0意味着时区0,而不是100%肯定.我的JavaScript库将其解释为时区0,然后显示下载为GMT的实际日期(-9小时前为我).

我的问题是,JSON下载了什么?这包括时区吗?我在这里错过了一些重要的步骤吗?

ton*_*ral 44

如果使用json.net进行序列化,请记住您可以指定DateTimeZoneHandling.

WebApiConf.cs中的示例

var json = config.Formatters.JsonFormatter;
json.SerializerSettings.DateTimeZoneHandling =Newtonsoft.Json.DateTimeZoneHandling.Local;
Run Code Online (Sandbox Code Playgroud)


Rad*_*ler 14

2012-10-06T09:45:00我们使用Web API和默认序列化程序在JSON中重现的日期时间是ISO 8601格式.

事实上,这就是所谓的组合日期和时间表示.提取:

..单个时间点可以通过连接完整的日期表达式,字母T作为分隔符和有效的时间表达式来表示.例如"2007-04-05T14:30"......

此格式没有时区信息.如时区指示符 Extract中所述:

ISO 8601中的时区表示为本地时间(未指定位置),UTC或UTC的偏移量.如果没有给出具有时间表示的UTC关系信息,则假定时间是在本地时间.

换句话说,如果没有指定UTC的偏移量,则将其视为本地时间.

UTC格式将与延长Z

如果时间是UTC,则在没有空格的时间之后直接添加Z. Z是零UTC偏移的区域指示符.因此,"09:30 UTC"表示为"09:30Z"或"0930Z"."14:45:15 UTC"将是"14:45:15Z"或"144515Z".

UTC时间也被称为'Zulu'时间,因为'Zulu'是'Z'的北约语音字母词.

所以,我们收到的日期时间是ISO 8601格式,被视为当地时区(最后没有Z像这样2012-10-06T09:45:00Z)

  • 我注意到当我用以下函数装饰我的日期时间时:[JsonProperty(ItemConverterType = typeof(JavaScriptDateTimeConverter))] public DateTime LogDate {get; 组; 我得到了我对转换的期望,如果不是默认值? (3认同)