У меня есть 2 класса:
Родитель
class Parent {
@SerializedName("variable1")
int variable1;
@SerializedName("child")
Child child;
//Getters and Setters
}
Child
class Child {
@SerializedName("childVar")
int childVar1;
//Getters and Setters
}
Они расширены как:
ExtendedChild
class ExtendedChild extends Child {
@SerializedName("childVar2")
int childVar2;
//Getters and Setters
}
ExtendedParent
class ExtendedParent extends Parent {
@SerializedName("variable2")
int variable2;
@SerializedName("child")
ExtendedChild extendedChild;
//Getters and Setters
}
Я хочу использовать эти классы для маршалинга от Json. Я планирую использовать библиотеку GSON. Я хочу отменить маршалинг в классы ExtendedParent или Parent на основе полезной нагрузки. Я знаю в своем коде, какой это тип Parent. Просто для того, чтобы правильно представлять и избегать избыточного объявления переменных, я хотел использовать Inheritance. Ниже приведены два примера со мной -
Я перенесу нижеследующую полезную нагрузку в ExtendedParent.class
{
'variable1':12,
'variable2':23,
'child':{
'childVar1': 43,
'childVar2': 23
}
}
Я перенесу нижнюю полезную нагрузку в Parent.class
{
'variable1':12,
'child':{
'childVar1': 43
}
}
Однако, когда я пытаюсь разархивировать, как показано ниже,
ExtendedParent extendedParent = new Gson()
.fromJson('<Passing the first Json string above>', ExtendedParent.class);
Я сталкиваюсь ниже исключения.
java.lang.IllegalArgumentException: класс ExtendedParent объявляет
несколько полей JSON с именем child
Не в состоянии понять, в чем проблема. Любая помощь или указатели будут высоко оценены. Я попробовал несколько способов избежать скрытия переменных на объектах Child, но я не могу понять, как решить эту проблему.