我有一个不能用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[]
任何帮助都将不胜感激。
当然,我不能直接复制代码,因为我已经摆脱了它,我还没有到开始版本化的地步,但本质上:
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属性应用注释,我想默认使用此反序列化器。我做错了什么?
问题内容: 我有这个架构: 我想用Gson序列化Data对象,并得到类似的东西: 为此,我必须对学生部分使用自定义序列化程序,以便Gson仅打印学校的ID。但是对于学校来说,我必须有正常的序列化器。 我如何只用一个Gson对象就能完成所有工作? 问题答案: 您可以编写自定义序列化器,如下所示:
问题内容: 确定,所以我编辑了问题,因为它不够清楚。 编辑2 :更新了JSON文件。 我在Android应用程序中使用GSON,我需要解析来自服务器的JSON文件,这些文件有点太复杂了。我不想让我的对象结构太沉重,所以我想简化内容: 所以我的对象的结构将不是JSON文件的结构。 例如,如果在JSON中,我有以下内容: 我不想保留我当前的对象结构,即一个对象,其中包含一个和一个“总计”。但是我只想将
我有一个JestClient(elasticsearch)响应,我试图将其反序列化为一个对象。该对象包含两个DateTime字段,而在响应中,它们是字符串,因此我得到: 所以,我创建了一个自定义反序列化器来解决这个问题…然而,无论我做什么,我总是得到同样的错误。不知何故它没有注册使用它? 最后,我试图解析JestClient响应的代码: 无论我尝试什么,我总是得到上面的错误,我甚至不确定在这一点上
据我所知,gson不会自动将java.util.Date对象序列化和反序列化为ISO字符串,比如“yyyy-mm-ddthh:mm:ssz”或“2014-04-15t18:22:00-05:00”。因此,为了让我在客户机(使用gson改型)和服务器之间正确地通信日期,我需要指定gson的日期格式。以下是我所做的: 添加。SetDateFormat行就足以让gson正确地将时间戳字符串反序列化为日期
问题内容: 遵循在使用GSON解析JSON时使用枚举中的建议,我正在尝试序列化其键是使用Gson 的映射。 考虑以下类别: 两个问题: 为什么打印而不是? 我该如何打印? 问题答案: Gson对密钥使用了专用的序列化器。默认情况下,它使用将要用作键的对象的。对于类型,基本上就是常量的名称。,默认为类型,仅当将序列化为JSON值(对名称除外)时才使用。 使用来构建你的实例。