问题是
Time
对象不可序列化,您应该为其提供序列化和反序列化机制。我假设
时间
你的代码中的类是
java.sql.Time
哪个是儿童班
java.util.Date
,所以它有两个:
public long getTime() { ... }
和
public void setTime(long time) { ... }
我已经为它开发了一个示例代码,您可以根据需要更改它:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.sql.Time;
import java.util.Hashtable;
public class SerializeHelper {
private static Gson gson;
static {
JsonSerializer<Time> serializer = new JsonSerializer<Time>() {
@Override
public JsonElement serialize(Time src, Type type, JsonSerializationContext context) {
return src == null ? null : new JsonPrimitive(src.getTime());
}
};
JsonDeserializer<Time> deserializer = new JsonDeserializer<Time>() {
@Override
public Time deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException {
return json == null ? null : new Time(json.getAsLong());
}
};
gson = new GsonBuilder()
.registerTypeAdapter(Time.class, serializer)
.registerTypeAdapter(Time.class, deserializer).create();
}
public static String serialize(Hashtable<Integer, Hashtable<Size, Time>> results) {
return gson.toJson(results);
}
public Hashtable<Integer, Hashtable<Size, Time>> deserialize(String resultsJsonStr) {
if (resultsJsonStr == null)
return new Hashtable<>();
else {
Type typeOfHashMap = new TypeToken<Hashtable<Integer, Hashtable<Size, Time>>>() {
}.getType();
return gson.fromJson(resultsJsonStr, typeOfHashMap);
}
}
}