【问题标题】:Null or Empty Object parsing in Kotlinx.serializationKotlinx.serialization 中的 Null 或 Empty Object 解析
【发布时间】:2021-12-08 22:06:47
【问题描述】:

如何解析这两种类型的响应:

{
"x" : "some_string"
}

{
"x" : { } 
}

进入一个看起来像这样的数据类:

@Serializable
data class SomeClass {
  
   @SerialName("x")
   val x : String?
}

【问题讨论】:

标签: android kotlin kotlinx.serialization kotlinx


【解决方案1】:

这仅适用于 writing a custom serializer,您将其应用于 x 字段。

String 是一个原语 (JsonPrimitive)。 {} 是一个对象 (JsonObject)。您似乎在这里将null 编码为空的JsonObject,并且在设置值后,将其编码为JsonPrimitive

如果这是一个严格的要求,您需要编写一个自定义序列化程序,将一个空对象转换为null,这应该是相当简单的。如果此对象包含 any 键,您可能还希望序列化失败。

但是,惯用的方法是将其简单地编码为null,在这种情况下,默认的kotlinx.serialization 序列化程序将起作用;它负责可空类型。

【讨论】:

    【解决方案2】:

    我认为你可以这样做:

    @Serializable
    data class Foo {
       @SerialName("bar")
       val bar: String? = null
    }
    

    我可能错了……

    来源:GitHub issue

    【讨论】:

    • 这确实适用于通常可为空的值。但是,它仍然无法将{ } 解析为“null”
    • 上述解决方案对于字符串 json 是正确的,对于 Json 对象,您需要添加辅助 @SerialName("bar2") val bar2: ObjectX? = 空
    • 对于同一个键(在这种情况下为“x”),你不能有 2 种不同的类型
    猜你喜欢
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 2013-02-01
    • 2013-08-21
    • 1970-01-01
    相关资源
    最近更新 更多