当前位置: 首页 > 面试题库 >

ASP.NET MVC Json DateTime序列化转换为UTC

濮阳繁
2023-03-14
问题内容

在ASP.NET MVC Controller上使用Json()方法给我带来了麻烦-使用服务器时间,将此方法中引发的每个DateTime都转换为UTC。

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

那么是否可以在Web.config中进行设置,并使JSON序列化程序将每个日期都视为UTC时间?


问题答案:

该死,看来我最近注定要在StackOverflow上回答我自己的问题。igh,这是解决方案:

  1. 使用NuGet安装ServiceStack.Text-您将免费获得更快的JSON序列化(不客气)
  2. 安装ServiceStack.Text之后,只需在基本Controller中重写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));
            }
        }
    }  
  1. 似乎默认情况下,此序列化程序执行“正确的操作”-如果未指定DateTime.Kind对象,则不会与您的DateTime对象混淆。但是,我在Global.asax中做了一些其他的配置调整(最好在开始使用库之前就知道该怎么做):
        protected void Application_Start()
    {
        JsConfig.DateHandler = JsonDateHandler.ISO8601;
        JsConfig.TreatEnumAsInteger = true;

        // rest of the method...
    }

该链接帮助



 类似资料:
  • 问题内容: 我正在尝试使用JAXB将A序列化为XML。我是Java的新手(来自C#),所以对此任务感到困惑。 我已经看到以下代码: 像这样被调用:,但是是错误的(我已经知道)。 Java专家可以告诉我如何调用此代码吗?提出一个更简单的实现(当然还有一个调用示例)也是最受欢迎的。 谢谢。 问题答案: 您将需要创建一个包装器类以保留: 然后,您可以执行以下操作: 这将产生以下输出: 注意事项 是线程安

  • 问题内容: 我用过这种方法 它正在打印“ jsonObject为null”。 “ error:nil”有什么问题吗? 我没有使用任何网址或连接方法。 我有一个json文件,我想在表中显示它。 问题答案: 请尝试以下代码。

  • 问题内容: 我对javascript并不太熟悉,而且令人赞叹,因为我无法向使用ORM名称Sequelize.js从数据库中获取的对象添加新属性。 为了避免这种情况,我使用此技巧: 因此,通常如何向对象添加新属性。 如果有帮助,我使用sequelize-postgres版本2.0.x。 更新。 console.log(节点): 接下来,我想您会想到的是:“好吧,很简单,只需将您的属性添加到dataV

  • 问题内容: 这个下课 需要转换为 我尝试将对象手动传递给将变量设置为字典并返回字典的函数。但是,我希望有一种更好的方法来实现这一目标。 问题答案: 在Swift 4中,您可以从类型继承。

  • 我正在使用Spring Kafka集成,我有自己的值通用序列化器/反序列化器,如下所示 序列化程序: 反序列化程序: 序列化程序工作得很好,但是当涉及到在消费消息时反序列化值时,我得到了一个而不是所需的对象,请告诉我我错在哪里,提前感谢。

  • 问题内容: 我正在使用大猩猩 websocket,并且正在计划使用json进行序列化/反序列化。 假设我有这样的结构来接收传入的消息: 和 大猩猩提供接收传入的消息。传入的消息可以是Foo或Bar,但是我不能使用和收听其他消息,这很混乱。我想要像javascript 这样的东西。如果接收到Foo,则如何处理传入消息,然后将其存储到结构中;如果接收到Bar,则将其存储到结构中? 我正在解决方案正在使