Как обращаться с классом Java, который имеет классконвертировать в JSON с помощью Gson - PullRequest
3 голосов
/ 31 января 2012

Для этого класса

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));

Печатает следующее:

Данные: {"dataTypes": {"DateParameter": {"annotationType": null}}}

Как получить правильный тип класса?

1 Ответ

1 голос
/ 31 января 2012

Я думаю, вы должны написать свой собственный пользовательский json de / serializer для 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"}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...