gpt4 book ai didi

Java:Gson - 自定义 JsonSerializer 中的 HashMap 到 JSON

转载 作者:行者123 更新时间:2023-11-30 06:33:58 26 4
gpt4 key购买 nike

我正在尝试为一个类(及其子类)创建自定义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 Reflection 没有太多经验。

我的部分代码:

@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 的实际类型 Map<String, Map<String, Integer>>

关于Java:Gson - 自定义 JsonSerializer 中的 HashMap 到 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45527857/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com