从JSON重建子对象

时间:2013-10-30 04:08:15

标签: java json inheritance vector gson

我有一个父类,比如P类和三个子类,比如C1,C2和C3。我在P类中有一个type变量来确定子类的类型。我有一个P的向量,其中包含C1,C2和C3的几个实例,我使用Gson库将该向量对象转换为JSON。当我使用Gson从JSON重建矢量时给出类型为Vector< P> (我使用TypeToken)我得到了一个类P的向量,但是当我根据type变量将P对象转换为任何子类时,我得到了ClassCastException。我怎么能毫无例外地实现这一目标?

Type t = new TypeToken<Vector<P>>() {}.getType();
Vector ps=(Vector<P>)gson.fromJson(jsonString,t);
for(P pObj : ps ) {
    if(pObj.type == 1) {
        C1 cObj=(C1)pObj;
    }
    else if(pObj.type == 2) {
        C2 cObj=(C2)pObj;
    }
    else if(pObj.type == 3) {
        C3 cObj=(C3)pObj;
    }
}

1 个答案:

答案 0 :(得分:1)

当你反序列化时,你得到一个P的向量,所以你不能转换为基类,因为具体的类是P(而不是Vector中每个对象的C [1-3]。我认为你获得所需结果的唯一机会就是编写自己的反序列化器。

我写了一个非常详细的answer,它有相同的概念。它使用List而不是Vector(更灵活)并使用字符串来匹配基类。剩下的就是你应该继续前进的方式。