包含枚举类型的对象转换成json字符串,首先需要定义一个实现JsonSerializer<T>,JsonDeserializer<T>接口的类
其中T代表我们自己定义的枚举类型
public class MySerializer implements JsonSerializer<ColorEnum>,JsonDeserializer<ColorEnum> {
@Override
public ColorEnum deserialize(JsonElement json, Type arg1,
JsonDeserializationContext arg2) throws JsonParseException {
// TODO Auto-generated method stub
if (json.getAsInt() < ColorEnum.values().length) {
return ColorEnum.values()[json.getAsInt()];
}
return null;
}
@Override
public JsonElement serialize(ColorEnum colorEnum, Type arg1,
JsonSerializationContext arg2) {
// TODO Auto-generated method stub
return new JsonPrimitive(colorEnum.ordinal());
}
}
然后和普通的对象转换成json一样,如下:
JSONEnumEntity entity = new JSONEnumEntity("haha",ColorEnum.BLUE);
Gson gson7 = new Gson();
String jsonStr = gson7.toJson(entity);
System.out.println(jsonStr);
Gson builder = new GsonBuilder()
.excludeFieldsWithoutExposeAnnotation()
.serializeNulls().setDateFormat("yyyy-MM-dd HH:mm:ss")
.setPrettyPrinting()//格式化输出
.setVersion(0)
.create();
StudentEntity entity = new StudentEntity(1,"张三",new Date(1992-1900,2,22));//年份需要减去1900,月份从0开始计算
String jsonStr = builder.toJson(entity);
System.out.println(jsonStr);
//-----------------------------------------------------------------------------
System.out.println("---------------------------------------------------------");
List<StudentEntity>entityList = new ArrayList<StudentEntity>();
StudentEntity entity2 = new StudentEntity(2,"李四",new Date(1993-1900,5,20,20,31,52));
entityList.add(entity);
entityList.add(entity2);
Type entityListType = new TypeToken<List<StudentEntity>>() {}.getType();
jsonStr = builder.toJson(entityList, entityListType);
System.out.println(jsonStr);