Gson.to Json () сохраняет родительские и дочерние поля, где дочерние поля являются доминирующими - PullRequest
1 голос
/ 06 мая 2020

Например, у меня есть 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

В идеале я бы хотел добиться этого без написания шаблонов для всех моих классов. Было бы неплохо, если бы это можно было сделать с каким-нибудь отражением. Я не особо беспокоюсь о производительности, так как это будет запускаться один раз в день, а результат будет кэшироваться в базе данных.

1 Ответ

0 голосов
/ 06 мая 2020

Я наткнулся на Klaxon Библиотеку, и она делает именно то, что мне нужно.

...