对于这个类
public class Data {
Map<String, Class<?>> dataTypes = new HashMap<String, Class<?>>();
}
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
.serializeNulls()
.create();
Data d = new Data();
d.dataTypes.put("DateParameter", java.util.Date.class);
System.out.println("Data is " + gson.toJson(d));
打印以下内容:
Data is {"dataTypes":{"DateParameter":{"annotationType":null}}}
如何打印正确的类类型?
最佳答案
我认为你必须自己写custom json de/serializer对于Class
class .尝试这样的事情:
public static class ClassSerializer implements
JsonSerializer<Class>, JsonDeserializer<Class> {
public JsonElement serialize(Class klass, Type type, JsonSerializationContext ctx) {
return new JsonPrimitive(klass.getCanonicalName());
}
public Class deserialize(JsonElement el, Type type, JsonDeserializationContext ctx) throws JsonParseException {
try {
return Class.forName(el.getAsJsonPrimitive().getAsString());
} catch (ClassNotFoundException cnfe) {
throw new JsonParseException(cnfe);
}
}
}
// ...
public static void main(String args[]) {
Gson gson = new GsonBuilder()
.registerTypeAdapter(Class.class, new ClassSerializer())
.setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
.serializeNulls()
.create();
Data d = new Data();
d.dataTypes.put("DateParameter", java.util.Date.class);
gson.toJson(d); // => {"dataTypes":{"DateParameter":"java.util.Date"}}
关于java - 如何处理具有 Class<?> 的 Java 类以使用 Gson 转换为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9070645/