簡體   English   中英

Moshi 和 Retrofit2:無法讀取服務響應

[英]Moshi and Retrofit2: Unable to read service response

我正在嘗試從網絡服務讀取 json 響應,但沒有成功。 這是我收到的json:

{
  "rsp": {
          "@code": "0",
          "@message": ""
       },
  "listOfStrings":[]
}

這是我解析響應的相對數據類

data class Response(
    val rsp : Rsp,
    val listOfStrings : List<String>
)

data class Rsp(
    @Json(name = "@code")
    val code : String,
    @Json(name = "@message")
    val message : String
)

但似乎 moshi 由於某種原因無法將 json 解析為對象,因為我總是得到帶有所有空字段的 Response 對象。

那么怎么了? json 響應字段的“@”字符可能會導致問題嗎?

更新

現在我可以通過將 @Json 注釋更改為 @field:Json 來正確解析響應:

data class Rsp(
    @field:Json(name = "@code")
    val code : String,
    @field:Json(name = "@message")
    val message : String
)

但我很想知道它為什么有效。

@field:如果您希望 moshi-kotlin 根據此處的討論與 proguard 一起使用,則需要 Json: https : //github.com/square/moshi/issues/315

試試這個模型,讓我知道它是否有效:

@Parcelize
data class Response(
    @Json(name = "rsp")
    val rsp: Rsp,
    @Json(name = "listOfStrings")
    val listOfStrings: List<String>
) : Parcelable {
    @Parcelize
    data class Rsp(
        @Json(name = "@code")
        val code: String,
        @Json(name = "@message")
        val message: String
    ) : Parcelable
}

編輯:如果它不起作用,請嘗試在具有@字段名稱后面添加反斜杠。

比如: @Json(name = "\\@code")

問題更新后更新:
您需要添加moshi-kotlin依賴項,然后使用KotlinJsonAdapterFactory

val moshi = Moshi.Builder()
    // ... add your own JsonAdapters and factories ...
    .add(KotlinJsonAdapterFactory())
    .build()

然后 moshi 無法忽略@Json

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM