2016-07-26 1 views
0

Я новичок в библиотеке Gson, не знаю, почему этот объект для json-конвертера работает странно. У меня есть код что-то похожее на этоGSon не правильно сериализуется с наследованием

public class A implements Serializable{ 
    @Expose 
    private String name; 

    public String getName() { 
     return name; 
    } 

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

} 

public class B extends A implements Serializable{ 
    @Expose 
    private int x; 

    public int getX() { 
     return x; 
    } 

    public void setX(int x) { 
     this.x = x; 
    } 
} 

public class MainclassTester{ 
    public static void main(String[] args){ 
    public B b = new B(); 
    b.setName("Point"); 
    b.setX(2); 
    final Gson gson = new GsonBuilder().create(); 
    System.out.println(gson.toJson(b)); 

    } 
} 

Я хочу выходной быть что-то вроде этого

{ 
"name":'Point', 
"x":2 
} 

но я получить выход

{ 
"name":'Point' 
} 

Мои подклассов переменные не Сериализированная правильно ,

+0

проверить это http://stackoverflow.com/questions/19588020/gson-serialize-a-list-of-polymorphic-objects/22081826#22081826 –

+0

, какую версию вы используете: ??? wih gson 2.7 работает нормально! –

+0

Пробовал 2.6.2 и работал отлично, кстати, вы не используете 'public' для переменной внутри метода: public B b = new B();' – shizhz

ответ

0

Вам необходимо аннотировать свой класс с помощью экспонирования, только для поля, подлежащего экспонированию. Так что вам нужно удалить фотографию до private int x;.

Чтобы подавить поле, необходимо создать экземпляр Gson с помощью модификатора excludeFieldsWithoutExposeAnnotation.

GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); 
Смежные вопросы