Kotlinx 序列化 - 如何为未知字段名称编写数据类

问题描述

我尝试为来自公共 API 的以下 JSON 响应编写数据类:

{
  "error": [],"result": {
    "AAVE": {
      "aclass": "currency","altname": "AAVE","decimals": 10,"display_decimals": 5
    },"ADA": {
      "aclass": "currency","altname": "ADA","decimals": 8,"display_decimals": 6
    },"ALGO": {
      "aclass": "currency","altname": "ALGO","ANT": {
      "aclass": "currency","altname": "ANT","display_decimals": 5
    }  
  }
}

我的数据类看起来像:

@Serializable
data class AssetInfo (
        @SerialName("error")
        val error: List<String>?,@SerialName("result")
        val result: Result,)

@Serializable
data class Result(
/*
Here is the problem,because the field "asset_name" does not exist.
*/
        @SerialName("asset_name")
        val asset_name: Asset,)

@Serializable
data class Asset(
        @SerialName("altname")
        val altname : String,@SerialName("aclass")
        val aclass  : String,@SerialName("decimals")
        val decimals  : String,@SerialName("display_decimals")
        val display_decimals  : String,)

在数据类“Result”中,我声明为“asset_name”的字段名称对于每个条目都是不同的。数据类必须是怎样的?有人可以帮忙吗?

解决方法

Result 类不需要。您的数据类应如下所示:

@Serializable
data class AssetInfo(
    @SerialName("error")
    val error: List<String>?,@SerialName("result")
    val result: Map<String,Asset>
)

@Serializable
data class Asset(
    @SerialName("altname")
    val altname: String,@SerialName("aclass")
    val aclass: String,@SerialName("decimals")
    val decimals: Int,@SerialName("display_decimals")
    val display_decimals: Int
)