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