Christian Sousa
07/29/2020, 3:53 PMprivate var parser = kotlinx.serialization.json.Json(JsonConfiguration.Stable.copy(ignoreUnknownKeys = true))
var stringToParse = "{\"gvlSpecificationVersion\":2}"
var parsedReturn: VendorList = parser.parse(VendorList.serializer(), stringToParse)
My structure is the following:
@Serializable
abstract class VendorList(
open var lastUpdated: String?,
open var gvlSpecificationVersion: Int?,
open var vendorListVersion: Int?,
open var tcfPolicyVersion: Int?,
open var vendors: Map<String, Vendor>?,
@Transient override var purposes: Map<String, Purpose>? = null,
@Transient override var features: Map<String, Feature>? = null,
@Transient override var specialFeatures: Map<String, Feature>? = null,
@Transient override var specialPurposes: Map<String, Purpose>? = null,
@Transient override var stacks: Map<String, Stack>? = null
): Declarations(
purposes = purposes,
features = features,
specialFeatures = specialFeatures,
specialPurposes = specialPurposes,
stacks = stacks
)
@Serializable
open class Declarations(
open var purposes: Map<String, Purpose>?,
open var specialPurposes: Map<String, Purpose>?,
open var features: Map<String, Feature>?,
open var specialFeatures: Map<String, Feature>?,
open var stacks: Map<String, Stack>?
)
@Serializable
data class Overflow (
var httpGetLimit: Int
)
@Serializable
data class Vendor(
var purposes: List<Int>,
var legIntPurposes: List<Int>,
var flexiblePurposes: List<Int>,
var specialPurposes: List<Int>,
var features: List<Int>,
var specialFeatures: List<Int>,
var policyUrl: String,
var deletedDate: @ContextualSerialization Any?,
var overflow: Overflow?,
override var id: Int,
override var name: String
): GVLMapItem
interface GVLMapItem {
var id: Int
var name: String
}
@Serializable
data class Purpose(
var description: String,
var descriptionLegal: String,
override var id: Int,
override var name: String
): GVLMapItem
@Serializable
data class Feature(
var description: String,
var descriptionLegal: String,
override var id: Int,
override var name: String
): GVLMapItem
@Serializable
data class Stack(
var purposes: List<Int>,
var specialFeatures: List<Int>,
var description: String,
override var id: Int,
override var name: String
): GVLMapItem
I’m getting the following:
kotlin.Throwable: Key type is missing in the map.
Any help would mean a lot!
Thanks!sandwwraith
07/31/2020, 11:05 AMVendorList
is an abstract class, so polymorphic serialization is enabled. Such serialization requires type
field in input to determine actual inheritor of the abstract class. Take a look here: https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/polymorphism.md