2013-08-25 2 views
1

나는 Gson을 사용하여 추상 클래스에서 상속 된 클래스를 비 직렬화한다.자바 JSON 상속 클래스를 비 직렬화

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); 
    } 
} 

내가 그것을 실행할 때 예외가 발생이, 사람이 어떻게이 문제를 해결하는 방법 말해 줄 수 : 여기

내 코드? 라인

Mammal aDog = gson.fromJson(toGson, Mammal.class); 

에서

+3

당신은 점점 예외가 무엇처럼 비 추상 클래스를 Mammal 클래스의 설명에서 abstract 키워드를 제거하거나 사용? –

답변

1

당신은 Mammal이 인스턴스화 질수 의미 추상 클래스이기 때문에 할 수 질수 포유류 개체의 인스턴스로 직렬화하기 위해 노력하고 있습니다.

당신은 필요 하나 대신 Dog.class

Mammal aDog = gson.fromJson(toGson, Dog.class); 
+0

고맙습니다. 그렇다면 런타임에, 나는 aDog의 클래스가 무엇인지 알지 못합니다. 단지 Mammal의 서브 클래스라는 것을 알고 있습니다. 그리고 그것을 올바른 서브 클래스로 캐스팅해야합니다. 어떻게해야합니까? – user2716189

+0

@ user2716189 그것은 좋은 질문입니다. 분리 된 스레드로 요청해야하지만,이 작업을하기 전에 [Gson 튜토리얼의 일부분] (https://sites.google.com/site/gson/gson-user-guide#TOC-Serializing-and-Deserializing- 임의의 객체 유형을 가진 콜렉션). – Pshemo

+0

@ user2716189 또한 [이 답변] (http://stackoverflow.com/a/5813490/1393766) 저자는 'listOfTestObject'를 사용하여 다른 객체의 컬렉션을 직렬화 및 비 직렬화하는 것에 대해 언급합니다. – Pshemo