Например, у меня есть 3 класса
class Grandad {
var lastname : String = "Smith"
var firstName : String = "John"
}
class Dad : Grandad() {
override firstname: String = "Jack"
var hasPersonalComputer = true
}
class Teenager : Dad() {
override var firstname : String = "Chris"
override var hasPersonalComputer = false
var hasSmartPhone = true
}
Теперь, когда я делаю что-то вроде этого:
println(Gson().toJson(Teenager()))
Я хотел бы, чтобы он выводил это, возьмите обратите внимание, что все поле будет напечатано, но в случаях переопределения дочерний элемент является доминирующим, в противном случае предполагается, что значение родительского элемента является значением по умолчанию
{
firstname: Chris
lastname: Smith
hasPersonalComputer: true
hasSmartPhone: true
}
Однако приведенное выше сбой приводит к следующему сообщению:
java.lang.IllegalArgumentException: class Teenager declares multiple JSON fields named firstname
В идеале я бы хотел добиться этого без написания шаблонов для всех моих классов. Было бы неплохо, если бы это можно было сделать с каким-нибудь отражением. Я не особо беспокоюсь о производительности, так как это будет запускаться один раз в день, а результат будет кэшироваться в базе данных.