System.Web.helpers.json编码UTC日期时间问题

时间:2014-10-13 07:55:44

标签: jquery asp.net-mvc json datetime asp.net-mvc-5

使用MVC5& jquery,我试图用json ecoding处理已知的日期时间转换问题。 在我看来,我正在使用以下行在视图上创建一个json对象:

@Html.Hidden("boxJson", Html.Raw(System.Web.Helpers.Json.Encode(item)));

一切都很有效,因为这个'item'im编码是一个包含一些内部类的复杂对象,但编码工作正常,除了日期时间。我已经设法处理随附的字符串(例如:/ Date(1078729200000)/),用于客户端的日期和一些客户端功能。但无法处理此Encode功能对日期的UTC问题。

[对于那些不熟悉它的人,Encode函数处理来自DB的Datetime,其中datetime的属性 kind 设置为Unspecified,自动为UTC时间。]

我知道我可能会做一些工作并通过某些客户端函数操作json中的日期,但我使用整个json对象将其发送回服务器而不会干扰。

var jsonObject =  $('#boxJson').val();
$.ajax({
                url: 'some url\Func',
                type: 'POST',
                data: jsonObject ,
                contentType: "application/json; charset=utf-8",

[HttpPost]
public JsonResult Func(Class jsonObject ){
//jsonObject comes with all class and inner class members BUT dates are in UTC timezone
...
}

,再次正常工作,但UTC日期时间除外。

我试过用:

 @Html.Hidden("boxJson" , Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(item)));

修复了日期问题,但无法处理复杂的“项目”对象。

基本上,我正在寻找一种方法来使用一些处理UTC日期时间问题的方法来覆盖Json.Encode方法。 或任何其他解决方法也会有所帮助。

更新

我的复杂课程'item':

public class ScheduleResult : IComparable<ScheduleResult>
    {
        public bool Succeeded { get; set; }
        public int Position { get; set; }   
        public ServiceRequest Request { get; set; }
        public ProviderResource AssignedResource { get; set; }
        public DateTime Start { get; set; }
        public DateTime Finish { get; set; }
        public ScheduleEvaluation ScheduleEvaluation { get; set; }
        public int Ranking { get; set; } 
    }

ServiceRequest,ProviderResource,ScheduleEvaluation也是类。

1 个答案:

答案 0 :(得分:0)

好吧,经过一些更多的编码,我认为我使用Json.NET的问题是我拥有的派生类,在我的例子中:ServiceRequest,ProviderResource就是这种类。 所以Json.NET需要类的属性[DataContract],并且每个类属性的[DataMemeber]都能够序列化类。