Json继承的序列化与反序列化

zhujun88nz 2013-08-25 06:05:40
我用的Gson, 发现序列化与反序列化有继承的类会出错,代码如下

public abstract class Mammal {
private String name;

public void setName(String name){
this.name = name;
}

public String getName(){
return name;
}
}


public class Dog extends Mammal{

public void bark(){

}
}



public class Cat extends Mammal{

public void mew(){

}
}



public class Main {
public static void main(String[] args) {
Gson gson = new Gson();
Mammal dog = new Dog();
String toGson = gson.toJson(dog);
Mammal aDog = gson.fromJson(toGson, Mammal.class);
}
}


这里我想的是Gson把String转化成class时候不知道到底是Dog还是Cat,错误如下:


请问如何解决?
...全文
340 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
抱抱枯叶 2013-08-26
  • 打赏
  • 举报
回复
第一个问题:你什么你的Mammal要用abstract?你在gson.fromJson(toGson, Mammal.class)相当于创建一个Mammal实体类,你觉得你能创建的出来 就好像一个接口 你用A a=new A()一样 这根本就是无解的 第二gson.fromJson(toGson, Mammal.class)照理说这边应该是Dog.class吧
小丑哥_V5 2013-08-26
  • 打赏
  • 举报
回复
失落夏天 2013-08-26
  • 打赏
  • 举报
回复
引用 楼主 zhujun88nz 的回复:
我用的Gson, 发现序列化与反序列化有继承的类会出错,代码如下

public abstract class Mammal {
    private String name;
    
    public void setName(String name){
        this.name = name;
    }
    
    public String getName(){
        return name;
    }
}

public class Dog extends Mammal{
    
    public void bark(){
        
    }
}

public class Cat extends Mammal{
    
    public void mew(){
        
    }
}

public class Main {
    public static void main(String[] args) {
        Gson gson = new Gson();
        Mammal dog = new Dog();
        String toGson = gson.toJson(dog);
        Mammal aDog = gson.fromJson(toGson, Mammal.class);
    }
}
这里我想的是Gson把String转化成class时候不知道到底是Dog还是Cat,错误如下: 请问如何解决?
你把 String toGson = gson.toJson(dog);这一句产生的toGson打印出来看效果,然后看看是否字符串中具有Mammal元素,再想想,还不明白的话继续追问我。
zhujun88nz 2013-08-26
  • 打赏
  • 举报
回复
如果在runtime时候不知道dog的类是什么,只知道它是mammal的子类然后要把它cast到相应的类,这样该怎么做?

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧