我正在尝试从Web服务读取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
)
但是我很好奇它为什么起作用。
答案 0 :(得分:0)
尝试此模型,让我知道它是否有效:
@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
。
答案 1 :(得分:0)
@field:根据以下讨论,如果您希望moshi-kotlin与proguard一起工作,则必须使用Json:https://github.com/square/moshi/issues/315