让我们假设我们有以下结构:
class BaseClass {
...
String typeOfSomeClass;
SomeClassBasedOnType someClassBasedOnType;
}
interface SomeClassBasedOnType {
}
class SomeClassBasedOnTypeImpl1 implements SomeClassBasedOnType {
String str1;
}
class SomeClassBasedOnTypeImpl2 implements SomeClassBasedOnType {
String str2;
}
通过上述结构,我想使用Gson存储JSON。我需要解析的两个可能的JSON是:
{"typeOfSomeClass":"type1", "someClassBasedOnType": {"str1":"someValue"}}
和
{"typeOfSomeClass":"type2", "someClassBasedOnType": {"str2":"someValue"}}
所以我创建了一个GsonBuilder并用它注册了InstanceCreator。但是,我无法弄清楚如何将类型传递给InstanceCreator实现类,因此我可以基于它获得具体的实现。这是我的代码atm:
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdaptor(SomeClassBasedOnType.class, new SomeClassBasedOnTypeInstanceCreator());
Gson gson = gsonBuilder.create();
BaseClass baseClass = gson.fromJson(strJson, BaseClass.class);
我的InstanceCreator实施:
class SomeClassBasedOnTypeInstanceCreator implements InstanceCreator<SomeClassBasedOnType> {
public SomeClassBasedOnType(Type type) {
if (the type from BaseClass eq. "type1") {
return new SomeClassBasedOnTypeImpl1()
} else {
return new SomeClassBasedOnTypeImpl2()
}
}
}
唯一的问题是,我不知道如何从&#34; base&#34; JSON。有什么想法吗?
只是澄清&#34;基地&#34; JSON包含许多键,它们都是相同的,包括键someClassBasedOnType。然而,关键someClassBasedOnType可能包含两个不同的JSON对象(具有不同的键),并且区分这些对象的方式基于&#34; base&#34;中的键的值。 JSON称为typeOfSomeClass。我想在someClassBasedOnType的InstanceCreator中获取该值,并使用它返回someClassBasedOnType的正确实例。