我有一个没有使用Gson正确序列化的类(类只是名称和HashMap)所以我编写了一个自定义序列化程序来打印HashMap中的名称和键值对。
public JsonElement serialize(SpecificationGroupList sgl, Type typeofT,
JsonSerializationContext context) {
System.out.println("here");
JsonObject ret = new JsonObject();
ret.addProperty("GroupName", sgl.getGroupName());
JsonArray jsonArray = new JsonArray();
ret.add("SpecificationPartList", jsonArray);
for (Entry<String, String> entry : sgl.getSpecificationPairList().entrySet()) {
JsonObject temp = new JsonObject();
temp.addProperty(entry.getKey(), entry.getValue());
jsonArray.add(temp);
}
return ret;
}
为了让它正确打印,我已经注册了自定义序列化程序,但是当我去打印类时,它实际上并没有使用序列化程序。我可以说,因为我在这里打印了序列化程序,它从不打印。
private void printProducts() {
Gson gson = new GsonBuilder().setPrettyPrinting()
.registerTypeAdapter(SpecificationGroupList.class, new SpecGroupListSerializer())
.create();
System.out.println(gson.getAdapter(SpecificationGroupList.class).toString());
for (Item i : items) {
System.out.println(gson.toJson(i));
System.out.println("sgl" + gson.toJson(i.getSpecificationGroupList()));
}
}
此外,这是实际打印和序列化整个对象不起作用,我也没有尝试直接打印对象。
{
"ItemNumber": "22-148-842",
"NeweggItemNumber": "N82E16822148842",
"Title": "Seagate Savvio 15K.3 ST9300653SS 300GB 15000 RPM 2.5\" SAS 6Gb/s Internal Enterprise Hard Drive -Bare Drive",
"specificationGroupList": []
}
sgl[]
非常感谢任何帮助。
答案 0 :(得分:1)
当然,我无法直接复制代码,因为我已经摆脱它并且我还没有达到我开始版本化的程度,但基本上是:
ArrayList<Item> items = new ArrayList<Item>();
Gson gson = new Gson
for (Item i : items){
i.setId(something);
}
for (Item i : items){
//...
//send query and get response here
//...
i = gson.fromJson(in, Item.class);
}
将i
设置为返回的Item
并没有真正起作用,因此当我尝试序列化时,我的对象中的HashMap
未正确设置为@Perception。我通过创建要保留something
的字符串列表来“解决”它,然后将返回的Item
添加到ArrayList,而不是尝试将其分配给现有的Item
。