繁体   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