我正在使用GSON序列化一些平台数据。当我使用@SerialName
在我的应用中捕获具有不同命名约定的平台数据时,它适用于其他类型,但不适用于Boolean
类型。举个简单的例子,如果我有一个类,如...
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class Person (
@SerialName("first_name") val firstName: String? = null,
@SerialName("last_name") val lastName: String? = null,
val age: Int? = null
)
...一切正常。序列化程序在数据中找到first_name
、last_name
和age
,并正确设置了Person
的属性。
但是,当我尝试添加一个Boolean
时...
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class Person (
@SerialName("first_name") val firstName: String? = null,
@SerialName("last_name") val lastName: String? = null,
val age: Int? = null,
@SerialName("can_sing") val canSing: Boolean? = null
)
...序列化程序没有捕获和分配can_sing
。奇怪的是,它可以处理String
,但不能处理Boolean
。有什么可以解释为什么我会看到这种行为吗?我可以解决这个问题(例如,我可以执行val can_sing: Boolean? = null
,而且它可以工作),但我只是想知道为什么@SerialName
似乎不适用于Boolean
,或者我只是忽略了一些明显东西。
1条答案
按热度按时间igsr9ssn1#
您混合了Gson和Kotlin注解类型- Gson使用
@SerializedName
而不是@SerialName
。我不确定在这种情况下字符串类型如何工作(可能是您如何调用Gson的问题中没有包括的内容)。例如,这里的第一个类(
Person
)可以用Kotlin序列化库序列化,第二个类可以用Gson:示例
使用Kotlin序列化库运行此单元测试:
产生预期的输出:
和Gson做那个
技术上可以工作,但忽略序列化名称注解(适用于所有情况,而不仅仅是布尔值)
将带Gson注解的类与Gson一起使用
再次给出正确的响应