使用Gson做java.util.Date的转换,找到了一种方法:
首先要写Date的转化器
package org.ygy.date;
import java.lang.reflect.Type;
import java.util.Date;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
public class UtilDateDeserializer implements JsonDeserializer<Date> {
@Override
public Date deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
return new Date(json.getAsJsonPrimitive().getAsLong());
}
}
package org.ygy.date;
import java.lang.reflect.Type;
import java.util.Date;
import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
public class UtilDateSerializer implements JsonSerializer<Date> {
@Override
public JsonElement serialize(Date src, Type typeOfSrc,
JsonSerializationContext context) {
return new JsonPrimitive(src.getTime());
}
}
测试:
package org.ygy.date;
import java.text.DateFormat;
import java.util.Date;
import org.junit.Test;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class DateTest {
public static String toJson(Date date) {
Gson gson = new GsonBuilder()
.registerTypeAdapter(Date.class, new UtilDateSerializer())
.setDateFormat(DateFormat.LONG).create();
return gson.toJson(date);
}
public static Date fromJson(String json) {
Gson gson = new GsonBuilder()
.registerTypeAdapter(Date.class, new UtilDateDeserializer())
.setDateFormat(DateFormat.LONG)
.create();
return gson.fromJson(json , Date.class);
}
@Test
public void testDate() {
String json = toJson(new Date());
System.out.println("json->" + json);
Date date = fromJson(json);
System.out.println(date.getTime());
}
}
结果显示: