我在使用 GSON 序列化和反序列化我的对象结构时遇到问题。为了描述这个问题,我必须稍微描述一下我的类结构:
我有一个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”的类。
我错过了什么?如何在不为每种类型添加自定义反序列化代码的情况下简单地反序列化(序列化似乎很好)这个复杂的结构?