java - 如何处理具有 Class<?> 的 Java 类以使用 Gson 转换为 JSON

标签 java json gson

对于这个类

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/

相关文章:

java - Android内存使用显示错误信息

javascript - JSON.parse 数据意外结束火狐插件

json - Scala Play Json 中 JsPath 到数组

java - 对象列表和Gson字符串之间的转换

java - 使用 pojo 数组将 Json 数组转换为 Pojo 时出现问题

java - 如何创建一个根据调用者类型进行过滤的切入点?

JAVA_HOME环境变量与Java JDK的乐趣

java - 为嵌入式 Jetty 中的多个路径添加 servlet 过滤器

json - Exiftool 使用 Python 导出 JSON

java - Gson反序列化接口(interface)到它的类实现