我有一个具有以下结构的用户对象:
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...
}
}
}
}
属性的键是字符串,属性的值可以是字符串、整数、数组、布尔值、映射等。
我试着用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' 字段已正确注入,但 'properties' 字段仍为空。
您知道我做错了什么吗?感谢您的帮助!
JsonObject
,然后直接将JSON转换为Map<String,Object>
。 - Srinivasbuilder
的GsonBuilder
,但是后来使用了一个名为gsonBuilder
的GsonBuilder
。如果这实际上可以编译,那么你之前创建了另一个GsonBuilder
并错误地使用了它。除此之外...在我的机器上反序列化得很好。 - Brian RoachgsonBuilder
是一个错误。我在代码中使用的是builder
。我将编辑我的主题进行更正。properties
字段是否已正确注入您的测试?对我来说它保持为空很奇怪... - Franck Anso