当前位置: 首页 > 知识库问答 >
问题:

未调用Gson自定义序列化程序

皇甫波峻
2023-03-14

我有一个不能用Gson正确序列化的类(类只是name和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[]

任何帮助都将不胜感激。

共有1个答案

宣弘新
2023-03-14

当然,我不能直接复制代码,因为我已经摆脱了它,我还没有到开始版本化的地步,但本质上:

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设置为返回的实际上并不起作用,因此,当我试图序列化时,对象中的Hashmap没有正确设置,正如@Perception所指出的那样。我通过创建一个字符串列表来保存某个东西,然后将返回的添加到ArrayList中,而不是试图将其分配给现有的来“解决”这个问题。

 类似资料:
  • 我有一个Spring项目,我尝试添加一个自定义反序列化器来反序列化日期属性,具体取决于它们的格式。如果我将其用作Date属性的注释,则效果很好。但是,如果我将反序列化器添加到对象映射器中,当Jackson反序列化日期时,它不会调用。 我尝试这样应用我的自定义反序列化程序: 我不想每次都对Date属性应用注释,我想默认使用此反序列化器。我做错了什么?

  • 问题内容: 确定,所以我编辑了问题,因为它不够清楚。 编辑2 :更新了JSON文件。 我在Android应用程序中使用GSON,我需要解析来自服务器的JSON文件,这些文件有点太复杂了。我不想让我的对象结构太沉重,所以我想简化内容: 所以我的对象的结构将不是JSON文件的结构。 例如,如果在JSON中,我有以下内容: 我不想保留我当前的对象结构,即一个对象,其中包含一个和一个“总计”。但是我只想将

  • 我有一个JestClient(elasticsearch)响应,我试图将其反序列化为一个对象。该对象包含两个DateTime字段,而在响应中,它们是字符串,因此我得到: 所以,我创建了一个自定义反序列化器来解决这个问题…然而,无论我做什么,我总是得到同样的错误。不知何故它没有注册使用它? 最后,我试图解析JestClient响应的代码: 无论我尝试什么,我总是得到上面的错误,我甚至不确定在这一点上

  • 问题内容: 我有这个架构: 我想用Gson序列化Data对象,并得到类似的东西: 为此,我必须对学生部分使用自定义序列化程序,以便Gson仅打印学校的ID。但是对于学校来说,我必须有正常的序列化器。 我如何只用一个Gson对象就能完成所有工作? 问题答案: 您可以编写自定义序列化器,如下所示:

  • 据我所知,gson不会自动将java.util.Date对象序列化和反序列化为ISO字符串,比如“yyyy-mm-ddthh:mm:ssz”或“2014-04-15t18:22:00-05:00”。因此,为了让我在客户机(使用gson改型)和服务器之间正确地通信日期,我需要指定gson的日期格式。以下是我所做的: 添加。SetDateFormat行就足以让gson正确地将时间戳字符串反序列化为日期

  • 也许我跑错了方向,但我有一个元素列表,我想读。 我有一个抽象基类,让我们称之为: 现在我有两个可能的实现: