3
我有一個標記爲瞬態的字段的POJO。 GSON不會序列化它。大。但是,當它被反序列化時,它將清除該字段的初始設置。GSON反序列化瞬變爲空
舉例來說,如果我有這樣的對象:
public class ObjWithTransient {
public String name;
public transient List<String> listOStrings = new ArrayList();
}
我運行這個測試:
@Test
public void testSerializeWithTransient() throws Exception {
ObjWithTransient obj = new ObjWithTransient();
obj.name = "Foobar";
String json = gson().toJson(obj);
// Deserialize
ObjWithTransient obj2 = GsonUtil.gson().fromJson(json, ObjWithTransient.class);
Assert.assertEquals(obj2.name, "Foobar");
Assert.assertNotNull(obj2.listOStrings); // <--- Fails here
Assert.assertEquals(obj2.listOStrings.size(), 0);
}
通過標記它短暫的,我以爲我告訴GSON忽略它,但似乎並非如此。這裏保留初始設置的最佳方法是什麼?
編輯: 我認爲這個問題是因爲沒有聲明的構造函數。這不適用於內部類,但是具有普通類或靜態內部類似乎起作用。讀取GSON代碼時,它會嘗試多種創建對象的方式,但最終會使用UnsafeConstructor創建它,如果沒有其他作用。這將創建一個空白條目的對象。我也可以添加一個InstanceCreator來告訴Gson如何創建對象。
這裏沒有提供真正的答案,但這可能有所幫助:http://camelcode.org/tutorial/Exclude-fields-from-JSON-with-java-modifiers-using-Gson.htm –