簡體   English   中英

GSON將瞬態反序列化為null

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM