2015-11-18 3 views
1

У меня есть следующие два JsonsDeserialize Json с такой же структурой, но с разными названиями полей

"attrs": { 
     "rect": { 
      "fill": "blue" 
     }, 
     "text": { 
      "fill": "white", 
      "text": "my box" 
     } 
    } 

и

"attrs": { 
     "circle": { 
      "fill": "red" 
     }, 
     "text": { 
      "text": "my circle", 
      "fill": "yellow" 
     } 
    } 

есть способ десериализации JSON к определенному классу, а именно class Rect и class Circle в то время как разборе? Я использую Gson 2.4

Это, как я называю это прямо сейчас:

Element[] element = gson.fromJson(arguments.toJson(), Element[].class); 

И класс Element имеет такую ​​структуру

public class Element { 
    private Attributes attr; 

public class Attributes{ 
     private Rectangle rect; 
     private Circle circle; 
    } 

Как я могу сказать gson, чтобы выбрать один из поля? Сейчас один из них будет нулевым, и я не хочу этого, потому что у меня будет больше форм.

+0

Если я понял вопрос, вы можете сделать два поля - «Прямоугольник» и «Круг круга». Затем, после разбора, один из них будет «null», а другой будет иметь значение. –

+0

@YeldarKurmangaliyev Я поставил больше кода в свой вопрос. –

ответ

0

Если «круг» или «прямой» всегда является первым ребенком, вы можете написать простую логику if else, чтобы определить, какой класс использовать для десериализации.

+0

Это не то, чего я хочу достичь. Я редактировал мой вопрос –