Json到pojo解组器以及android的变形类

Json到pojo解组器以及android的变形类,android,json,polymorphism,Android,Json,Polymorphism,我对rest和android有问题, 问题是我在示例类Human中有一个传输对象,它由男性和女性扩展,我想使用json作为Human对象的传输。 如果我使用标准序列化对象,我通常会这样做 if(human instanceof Male.class){} else if(human instance of Female.class){} else{ throw new RuntimeException("incorrect class")} 如何在android和rest中实现这一点? 我见过

我对rest和android有问题, 问题是我在示例类Human中有一个传输对象,它由男性和女性扩展,我想使用json作为Human对象的传输。 如果我使用标准序列化对象,我通常会这样做

if(human instanceof Male.class){}
else if(human instance of Female.class){}
else{ throw new RuntimeException("incorrect class")}
如何在android和rest中实现这一点? 我见过不支持多态性的Gson和Jaskson, 在服务器端,我们使用apachecxf进行rest,并带有jax-rs注释
想法/以前的经验???

我不知道任何自动执行反序列化的方法,但一种解决方案是对JSON使用解析器

假设如下

class Human {
    public Human(JSONObject jo) {
        // Parse out common json elements
    }
}

class Male {
    private boolean hasMaleParts;
    public Male(JSONObject jo) {
        super(jo);
        // Parse out male only parts
    }
}

class Female {
    private boolean hasFemaleParts;
    public Female(JSONObject jo) {
        super(jo);
        // Parse out female only parts
    }
}
在网络访问代码中的这三个类中,有一个方法可以键入返回的JSON并返回相应的对象

public Human typeJson(JSONObject jo) {
    if(jo.hasBoolean(hasMaleParts))
        return new Male(jo);
    else if(jo.hasBoolean(hasFemaleParts))
        return new Female(jo);
    else
        throw new RuntimeException("Unable to determine data type");
}
在本例中,hasMaleParts和hasFemaleParts是任意布尔标志,但是,在许多情况下,您可以使用标识属性更正确地键入它。所以,若你们试图区分摩托车和汽车,你们可以检查车轮的数量