asp.net-mvc – ASP.NET MVC Json DateTime序列化转换为UTC

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – ASP.NET MVC Json DateTime序列化转换为UTC前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在ASP.NET MVC Controller上使用Json()方法给我带来了麻烦 – 此方法中抛出的每个DateTime都使用服务器时间转换为UTC.

现在,有没有一种简单的方法告诉ASP.NET MVC Json Serializer停止自动将DateTime转换为UTC?正如在this question中指出的那样,使用DateTime.SpecifyKind(date,DateTimeKind.Utc)重新分配每个变量可以解决问题,但显然我无法在每个DateTime变量上手动执行此操作.

那么可以在Web.config中设置一些内容并让JSON序列化程序将每个日期视为UTC吗?

解决方法

该死,似乎最近我注定要在StackOverflow回答我自己的问题.叹了口气,这是解决方案:

>使用NuGet安装ServiceStack.Text – 您将免费获得更快的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...
}

This link helped

猜你在找的asp.Net相关文章