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 TimeDuration
实例序列化为表示秒数的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();