[英]GSON Deserializing transients as null
我有一個標有瞬態字段的POJO。 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如何創建對象。
我認為問題是因為沒有聲明的構造函數。 這不適用於內部類,但是使用普通類或靜態內部類似乎可以工作。 閱讀GSON代碼,它嘗試了多種創建對象的方法,但最終使用UnsafeConstructor來創建它,如果沒有其他工作。 這將創建一個具有全部空條目的對象。 我還可以添加一個InstanceCreator來告訴Gson如何創建對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.