对于Gson不知道怎么将类序列化和反序列化,如果想要对类进行序列化和反序列化需要提供给一个类型转换器指明怎么将类转换。FastJson就不会遇到这个问题
不提供就换报下面的错误
class ClassCodec implements JsonSerializer<Class<?>>, JsonDeserializer<Class<?>> {
@Override
public Class<?> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
try {
String str = json.getAsString();
return Class.forName(str); // 反射
} catch (ClassNotFoundException e) {
throw new JsonParseException(e);
}
}
@Override // String.class
public JsonElement serialize(Class<?> src, Type typeOfSrc, JsonSerializationContext context) {
// class -> json
return new JsonPrimitive(src.getName());
// 需要将类封装成一个JsonElement对象返回
// Class<?> src 就是需要转换成Json字符串的类,src.getName()获取该类的名字
//因为这里测试使用的String ,所以用JsonPrimitive原始类型封装
}
}
调用:
Gson gson = new GsonBuilder().registerTypeAdapter(Class.class, new Serializer.ClassCodec()).create();
String json = gson.toJson(object);