Assume I have the following type hierarchy:
interface Foo {
val empty
val notEmpty get() = !empty
}
data class Bar(override val empty) : Foo
If I try to add @ru.tinkoff.kora.json.common.annotation.JsonSkip annotation to notEmpty property, I get the following error:
This annotation is not applicable to target 'member property without backing field or delegate'
However, if I then serialize Bar(false) instance with generated JsonWriter<Bar>, I get the following JSON:
{
"empty": false,
"notEmpty": true
}
So, there's currently no way to exclude inherited default property from serialization. The only workaround is to explicitly declare notEmpty inside Bar with backing field like so:
data class Bar(override val empty) : Foo {
@JsonSkip
override val optional = !required // notice I'm not using get() anymore, so !required is stored in field
}
But this kills the whole point of creating notEmpty property in interface.
Assume I have the following type hierarchy:
If I try to add
@ru.tinkoff.kora.json.common.annotation.JsonSkipannotation tonotEmptyproperty, I get the following error:However, if I then serialize
Bar(false)instance with generatedJsonWriter<Bar>, I get the following JSON:{ "empty": false, "notEmpty": true }So, there's currently no way to exclude inherited default property from serialization. The only workaround is to explicitly declare
notEmptyinsideBarwith backing field like so:But this kills the whole point of creating
notEmptyproperty in interface.