JSON 字段的多个名称

Ser*_*gey 4 serialization json kotlin json-deserialization kotlinx.serialization

我使用kotlinx.serialization库来序列化/反序列化 JSON。有一个 JSON 字符串:

{"id":"1"}
Run Code Online (Sandbox Code Playgroud)

也可以表示为

{"uid":"1"}
Run Code Online (Sandbox Code Playgroud)

我想用一个属性处理两个名字,例如:

@Serializable
data class User(val id: String)
Run Code Online (Sandbox Code Playgroud)

是否可以仅使用一个data类及其属性来解析两个 JSON?

Jof*_*rey 8

是的,您可以使用@JsonNames注释来提供除属性名称之外的替代名称(请参阅文档)。您还可以在注释中定义多个附加名称。

@OptIn(ExperimentalSerializationApi::class)
@Serializable
data class User(
    @JsonNames("uid")
    val id: String,
)
Run Code Online (Sandbox Code Playgroud)

对于序列化,将使用属性名称。对于反序列化,JSON 可能包含属性名称或附加名称,两者都映射到属性id。