我正在尝试为一个类(及其子类)创建自定义JsonSerializer
。
所以我要遍历班级的领域并做一些事情。
我遇到了一个问题:如果我在课堂上有这样的事情:
public Map<String, Map<String, Integer>> nestedHashMap = new HashMap<String, Map<String, Integer>>() {{
put("levelOneKey", new HashMap<String, Integer>() {{
put("levelTwoKey", 25);
}});
}};
它变成
{}
。我检查过,它具有创建的元素,GSON无法正确处理。如果我尝试在没有JsonSerializer的情况下使用GSON,它将起作用。显然,我做错了。我没有Java反射方面的经验。
我的部分代码:
@Override
public JsonElement serialize(JsonConfig src, Type typeOfSrc, JsonSerializationContext context) {
JsonObject o = new JsonObject();
//...
Field[] fields = src.getClass().getDeclaredFields();
for (Field field : fields) {
Object fieldValue = null;
try {
fieldValue = field.get(src);
} catch (IllegalAccessException e) {
System.out.print("IllegalAccessException for field " + field.getName() + ": " + e.toString());
continue;
}
o.add(field.getName(), context.serialize(fieldValue, field.getType()));
}
//...
}
我试图创建Gson的另一个实例,并用
o.add
替换:o.add(field.getName(), gson.toJson(fieldValue, field.getType()));
我检查了
fieldValue
是否包含元素。 最佳答案
问题是field.getType()
,您应该将其更改为field.getGenericType()
。
o.add(field.getName(), context.serialize(fieldValue, field.getGenericType()));
如果将两个值都打印到控制台,则
.getType()
仅返回java.util.Map
,但是.getGenericType()
返回地图的实际类型Map<String, Map<String, Integer>>
关于java - Java:Gson-自定义JsonSerializer中的JSON哈希图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45527857/