我在使用GSON序列化和反序列化我的對象結構時遇到了問題。爲了描述這個問題,我將不得不描述我的類結構:使用GSON將複雜對象(de)序列化爲JSON
我有一個java抽象類,讓我們將其命名爲「A」。還有類「BA」,「CA」,「DA」也是抽象的,它們擴展了類「A」。它們中的每一個都有自己的構造函數,其中沒有非構造函數。最後有幾個(許多!)類擴展「BC」或「CA」或「DA」。這些「底部」類的實例保存在「ArrayList」列表中。
現在,我試圖「jsonize」該數組列表。爲了創建JSON字符串我用這個代碼:
Gson gs = new Gson();
Type listOfTestObject = new TypeToken<List<A>>(){}.getType();
String rez = gs.toJson(getListOfAs(), listOfTestObject);
我試圖反序列化利用這一點,JSON(在其他類):
Type listOfTestObject = new TypeToken<ArrayList<A>>(){}.getType();
ArrayList<A> listOfAs = gs.fromJson(jsonREZString, listOfTestObject);
但上面的代碼中拋出這個:
Unable to invoke no-args constructor for class packagename.A. Register an InstanceCreator with Gson for this type may fix this problem.
現在,我已經在類「A」中創建了非參數構造函數,但沒有運氣。我已閱讀「InstanceCreator」,但看起來我必須爲每個擴展「A」的具體類創建一個「InstanceCreator」!對?我不能這樣做,因爲我有許多(許多!)類,通過「BA」,「CA」或「DA」擴展「A」。
你能幫我解決這個問題嗎,我錯過了什麼嗎?我怎樣才能簡單地反序列化(序列化看起來很好)這個複雜的結構,而不添加每個類型的自定義反序列化代碼?