2012-01-30 35 views
3

转换成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)); 

打印以下如何处理Java类:

数据为{ “数据类型”:{ “DateParameter”: {“annotationType”:null}}}

如何获得正确的类别类型?

回答

1

我认为你必须为Class class编写自己的custom json de/serializer。试试这样的:

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"}} 
+0

谢谢@maerics。这解决了我的问题。接受你的答案。 – gopalanj 2012-01-30 21:52:21

相关问题