1

我有一个不能用 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[]

任何帮助将不胜感激。

4

1 回答 1

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的 s 添加到 ArrayList 而不是尝试将其分配给现有的Item.

于 2013-05-12T15:33:32.127 回答