【问题标题】:GSON - How to always include millisecond in json?GSON - 如何始终在 json 中包含毫秒?
【发布时间】:2019-03-26 00:24:48
【问题描述】:

我正在构建与基于 .NET 的 REST API 交互的 Android 应用程序。

如果我在 SQL Server 中的表有 2 行具有以下日期时间值:

  • 2019-01-01 00:00:00.000
  • 2019-01-01 00:00:00.113

那么返回的json会有如下的值:

  • 2019-01-01T00:00:00
  • 2019-01-01T00:00:00.113

所以我不知道在创建 Gson 实例时如何为 setDateFormat 提供模式。

如果我使用GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss"),那么我的 gson 可以概括这两种情况,但它会丢失毫秒部分。

如果我使用GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"),那么我的 gson 在第二种情况下不会丢失毫秒部分,但在处理第一种情况时会抛出异常。

如何在两种情况下成功解析时间但仍然达到毫秒?任何提供的解决方案将不胜感激。我不介意我必须做的是服务器端还是客户端。

【问题讨论】:

  • 只要确保在您的 JSON 文本/数据中始终包含毫秒部分,即使它等于 0。然后解析 JSON 的任何模块都可以使用统一模式。我的意思是这个假设听起来不正确“那么返回的 json 将具有以下值(意味着 2 种可能的格式)”。您可以在 JSON 中始终将其设为 1 种单一格式。
  • @peter.petrov 因为我将我的 API 配置为返回 json,而不是 WebApiConfig.cs 文件中的 xml。所以我觉得我无法控制我的 API 如何构建其内容。如何创建自己的 json 格式?
  • @peter.petrov 谢谢。根据您的提示,我终于可以告诉我的 API 始终包含毫秒。

标签: java c# json sql-server


【解决方案1】:

在解决方法后,我自己找到了解决方案,感谢 peter.petrov

这是因为我将我的 API 配置为在我的 WebApiConfig.cs 中以 json 格式返回数据,而不是 xml。所以我觉得我无法控制它如何构建它的时间格式。但我终于找到了。这是我的 WebApiConfig.cs 文件:

var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
json.SerializerSettings.DateFormatString = "yyyy-MM-dd'T'HH:mm:ss.fff";
config.Formatters.Remove(config.Formatters.XmlFormatter);

现在我的服务器总是包含毫秒,无论如何。

就是这样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    相关资源
    最近更新 更多