【发布时间】:2018-11-02 18:48:28
【问题描述】:
我在 Kotlin 中有一个简单的 Books and Borrowers 库的模型,如果有一本书有一个 Borrower,它就会被签出。我使用箭头选项来编码借款人的缺席/存在:
data class Borrower(val name: Name, val maxBooks: MaxBooks)
data class Book(val title: String, val author: String, val borrower: Option<Borrower> = None)
我在将这些对象序列化/反序列化到 Gson 中的 JSON 时遇到问题 - 特别是在书中将 Option<Borrower> 表示为 JSON null:
[
{
"title": "Book100",
"author": "Author100",
"borrower": {
"name": "Borrower100",
"maxBooks": 100
}
},
{
"title": "Book200",
"author": "Author200",
"borrower": null
}
]
我的反序列化代码:
fun jsonStringToBooks(jsonString: String): List<Book> {
val gson = Gson()
return try {
gson.fromJson(jsonString, object : TypeToken<List<Book>>() {}.type)
} catch (e: Exception) {
emptyList()
}
}
我得到一个空列表。几乎相同的jsonStringToBorrowers 工作正常。
有人能指出正确的方向吗?
使用不同的 JSON 库(如 kotlinx.serialization 或 Klaxon 会更好吗?他们如何做 null <-> None 的事情?
谢谢!
【问题讨论】:
-
你应该让 borrower 可以为空,然后使用支持 kotlin 可空类型的库。我总是将 moshi 与 KotlinJsonAdapterFactory 一起使用