我有一个用户对象具有这种结构:反序列化地图<字符串,对象>场与GSON
class User {
private String id;
private String name;
private Map<String, Object> properties;
// GETTERS & SETTERS
}
我有一个JSON字符串具有该结构:
{
"user": {
"id:"123456789",
"name:"azerty",
"emailHash":"123456789", // not used in User class
"properties": {
"p1":1,
"p2":"test",
"p3":[1, 2, 3, 4],
"p4":{
etc...
}
}
}
}
属性键是字符串,属性的值可以是字符串,int,数组,布尔值,映射等。
我试图用Gson反序列化这个JSON字符串:
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(jsonString);
JsonObject object = element.getAsJsonObject();
GsonBuilder builder = new GsonBuilder();
builder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
Gson gson = builder.create();
User user = (User) gson.fromJson(object.get("user"), new TypeToken<User>() {}.getType());
字段'id'和'name'被正确注入,但字段'属性'保持为空。
你知道我在做什么错吗? 在此先感谢您的帮助!
我建议具有属性作为'JsonObject',然后直接将JSON转换为'Map'。 –
Srinivas
你的代码在一个小问题上工作得很好:你似乎已经创建了一个名为'builder'的GsonBuilder',然后使用了一个名为'gsonBuilder'。如果这实际上是编译,那么你有另一个你以前创建的'GsonBuilder',并且错误地使用它。除此之外......它可以在我的机器上反序列化。 –
'gsonBuilder'在编写主题时出错。它是我在代码中使用的“构建器”。我会编辑我的话题进行更正。 “属性”字段在您的测试中正确注入?它非常奇怪,它保持为null ... –