使用JSON()在ASP.NET MVC控制器方法给我的麻烦 - 在这个方法中抛出的每一个日期时间使用服务器的时间转换为UTC。
现在,有一个简单的方法来告诉ASP.NET MVC JSON序列停止自动转换日期时间为UTC? 因为它是在注意这个问题 reasigning每个变量与DateTime.SpecifyKind(日期,DateTimeKind.Utc)是卓有成效的,但显然我不能手动做到这一点每个日期时间变量。
那么,是否可以设置在Web.config中的东西,都JSON序列对待每一个日期,如果是UTC?
该死的,看来最近我注定在StackOverflow上在这里回答自己的问题。 叹了口气,这里是解决方案:
- 安装ServiceStack.Text使用的NuGet - 你会得到免费更快JSON序列化(不客气)
一旦安装ServiceStack.Text,只是覆盖的Json方法在你的基地控制器(你有一个,对不对?):
protected override JsonResult Json(object data, string contentType, Encoding contentEncoding, JsonRequestBehavior behavior) { return new ServiceStackJsonResult { Data = data, ContentType = contentType, ContentEncoding = contentEncoding }; } public class ServiceStackJsonResult : JsonResult { public override void ExecuteResult(ControllerContext context) { HttpResponseBase response = context.HttpContext.Response; response.ContentType = !String.IsNullOrEmpty(ContentType) ? ContentType : "application/json"; if (ContentEncoding != null) { response.ContentEncoding = ContentEncoding; } if (Data != null) { response.Write(JsonSerializer.SerializeToString(Data)); } } }
看来,这串默认完成了“正确的事” - 如果他们的DateTime.Kind是不确定它不惹你datetime对象。 但是,我没有一些额外的配置调整在Global.asax中(和它的好,知道该怎么做,你开始使用库前):
protected void Application_Start() { JsConfig.DateHandler = JsonDateHandler.ISO8601; JsConfig.TreatEnumAsInteger = true; // rest of the method... }
此链接帮助