从包装类Gson中派生出确切的类

时间:2016-07-29 11:19:05

标签: java json parsing gson

让我们假设我们有以下结构:

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的正确实例。

0 个答案:

没有答案