我有一個用戶對象具有這種結構:反序列化地圖<字符串,對象>場與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 ... –