【问题标题】:Why does "iMillis" appear when serializing of Joda-Time Duration?为什么连载 Joda-Time Duration 时会出现“iMillis”?
【发布时间】:2015-09-15 20:05:43
【问题描述】:

我想使用Gson 将 Joda-Time Duration 实例序列化为表示秒数的 long。我的序列化程序类是:

private class DurationSerializer implements JsonSerializer<Duration>
{
  public JsonElement serialize(Duration duration,
                               Type durationType,
                               JsonSerializationContext context)
    {
    return new JsonPrimitive(duration.getStandardSeconds());
    }
}

这个输出是{"iMillis":900000}。我只想要秒数,而不是 iMillis 标签。这可能吗?

【问题讨论】:

  • 您如何将序列化程序配置(插入)到 Gson 中,以便调用它来序列化 Duration?你确定它确实被调用了吗?

标签: java json serialization gson jodatime


【解决方案1】:

我不建议使用 JsonDeserializer,因为它已被弃用,取而代之的是 Streaming API。我不确定你的问题是什么,但我认为它不在 Serializer 中。

尝试改用TypeAdapter

public class DurationTypeAdapter extends TypeAdapter<Duration> {
  public void write(JsonWriter writer, Duration value) throws IOException {
    if (value == null) {
      writer.nullValue();
      return;
    }

    writer.value(duration.getStandardSeconds());
  }

  // implementation of read() is left as an exercise to you
}

这样注册:

GsonBuidler builder = new GsonBuilder();
builder.registerTypeAdapter(new DurationTypeAdapter());
Gson g = builder.create();

【讨论】:

  • 这与我所拥有的非常接近,除了我的字段名为持续时间。完整字段显示为“持续时间”:{“iMillis”:604800000}。我想要的是“持续时间”:604800000。我的代码中没有 iMillis 这个名字。谢谢。
猜你喜欢
  • 1970-01-01
  • 2020-02-29
  • 2011-02-08
  • 2015-01-18
  • 2010-09-27
  • 2016-11-22
  • 1970-01-01
  • 2012-07-22
  • 1970-01-01
相关资源
最近更新 更多