GSON Joda Time 序列化器是否有标准实现?

2022-09-01 04:16:18

我正在使用GSON将一些对象图序列化为JSON。这些对象图使用 Joda Time 实体(等)。DateTimeLocalTime

谷歌对“gson joda”的点击量最大的是这个页面:

它为 的类型适配器提供源。此链接也是 GSON 用户指南中引用的内容。org.joda.time.DateTime

我期望找到一个预滚动的库,其中包含joda-time序列器,我可以将其引用为Maven依赖项 - 但我找不到一个。

有吗?还是我被迫在自己的项目中复制该片段?


答案 1

我决定推出我自己的开源产品 - 你可以在这里找到它:

https://github.com/gkopff/gson-jodatime-serialisers

以下是 Maven 详细信息(查看中心以获取最新版本):

<dependency>
  <groupId>com.fatboyindustrial.gson-jodatime-serialisers</groupId>
  <artifactId>gson-jodatime-serialisers</artifactId>
  <version>1.6.0</version>
</dependency>

下面是一个如何驾驶它的简单示例:

Gson gson = Converters.registerDateTime(new GsonBuilder()).create();
SomeContainerObject original = new SomeContainerObject(new DateTime());

String json = gson.toJson(original);
SomeContainerObject reconstituted = gson.fromJson(json, SomeContainerObject.class);

答案 2

我使用上面的答案来做一个小帮助程序,它将处理包含 DateTime 变量的模型对象的序列化和反序列化。

    public static Gson gsonDateTime() {
    Gson gson = new GsonBuilder()
            .registerTypeAdapter(DateTime.class, new JsonSerializer<DateTime>() {
                @Override
                public JsonElement serialize(DateTime json, Type typeOfSrc, JsonSerializationContext context) {
                    return new JsonPrimitive(ISODateTimeFormat.dateTime().print(json));
                }
            })
            .registerTypeAdapter(DateTime.class, new JsonDeserializer<DateTime>() {
                @Override
                public DateTime deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
                    DateTime dt = ISODateTimeFormat.dateTime().parseDateTime(json.getAsString());
                    return dt;
                }
            })
            .create();
    return gson;
}

推荐