Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “为什么?”;“伊米利斯”;在序列化Joda持续时间时出现?_Java_Json_Serialization_Gson_Jodatime - Fatal编程技术网

Java “为什么?”;“伊米利斯”;在序列化Joda持续时间时出现?

Java “为什么?”;“伊米利斯”;在序列化Joda持续时间时出现?,java,json,serialization,gson,jodatime,Java,Json,Serialization,Gson,Jodatime,我想使用Gson将Joda TimeDuration实例序列化为表示秒数的long。我的序列化程序类是: private class DurationSerializer implements JsonSerializer<Duration> { public JsonElement serialize(Duration duration, Type durationType,

我想使用
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());
    }
}
私有类DurationSerializer实现JsonSerializer
{
公共JsonElement序列化(持续时间,
类型durationType,
JsonSerializationContext(上下文)
{
返回新的JsonPrimitive(duration.getStandardSeconds());
}
}

这个函数的输出是
{“iMillis”:900000}
。我只需要秒数,而不是iMillis标签。这是可能的吗?

我不建议使用
JsonDeserializer
,因为它已经被弃用,取而代之的是流式API。我不确定您的问题是什么,但我认为它不在
序列化程序中

尝试改用:


除了我的字段名为duration之外,这与我的非常接近。完整字段显示为“duration”:{“iMillis”:604800000}。我想要的是“持续时间”:604800000。我的代码中没有iMillis这个名字。谢谢。您如何将序列化程序配置(插入)到Gson中,以便在序列化期间调用它?你确定它确实被调用了吗?
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();