如何使用 Kotlin 序列化器序列化原始对象列表?

问题描述 投票:0回答:2

我有一个 json 响应,它是一个对象列表的列表,我正在尝试序列化它。如何使用 kotlin 序列化器序列化它?

{
  "body": [
    [
      "Fresho Apple - Royal Gala, Regular, 4 pcs",
      "Red",
      "146",
      82878,
      "Fruit",
      "40033823",
      4,
      600,
      36.5,
      "Turkey",
      "Best before 3 days from delivery date",
      "A combination of slightly tart-tasting skin and honey floral-tasting flesh, the Royal Gala apples, as the name suggests looks regal with beautiful golden-coloured streaks. Royal Gala apples are a good source of fibre and vitamin C, and they are a healthy snack or addition to a meal.",
      620,
      "https://www.bigbasket.com/cookbook/recipes/1611/apple-crumble-pie/",
      "2023-06-06T18:30:00Z",
      false,
      false,
      true
    ]
  ]
}

我已经创建了数据类,

@Serializable
data class Response(
    val body: List<List<Any>>
)
@Serializable
data class Product(
  val title: String,
  val color: String,
  val price: String,
  val id: Int,
  val type: String,
  val ean: String,
  val count: Int,
  val weight: Int,
  val pricePerPiece: Float,
  val countryOfOrigin: String,
  val expiry: String,
  val Description: String,
  val nettWeight: Int,
  val link: String,
  val date: String,
  val isUnavailable: Boolean,
  val isCooked: Boolean,
  val isFruit: Boolean
)

我很困惑,如何将数据类型转换为列表,以便我们可以将其映射到产品?

android kotlin serialization polymorphism kotlinx.serialization
2个回答
0
投票

首先,这是一些非常不惯用的 JSON(使用列表来表示对象)。因此,如果可能的话,我会要求发出此 JSON 的人重新考虑其格式并改用 JSON 对象(具有其所有优点,例如顺序独立性),在这种情况下,它会像这样简单:

@Serializable
data class Response(
    val body: List<Product>
)

如果您无法控制它,则必须为 body

编写自定义序列化器
,仍然使用
List<Product>
,在其中按顺序将列表项映射到预期属性。


-1
投票

这完全取决于您真正的问题是什么。我真的无法理解这是本地 JSON 还是网络。如果是本地的:阅读它 -> 使用 this 作为参考。使用encodeToString/decodeToString。如果网络你需要 Retrofit + kotlin 序列化。一切都很好地解释了这里

顺便说一句。您无法将其 [您的 JSON] 解析为

val body: List<List<Any>>
。它应该是你需要的 obj 类型。即
List<Product>
。或者
List<List<Product>>
如果有嵌套列表。

祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.