在运行以下代码行尝试传递JSON string之后:
var test = String(tempstore, Charset.forName("US-ASCII"))
var gson = Gson()
var testmodel = gson.fromJson(test, AuthoriseReq::class.java)
JSON String如下:
{
"transaction": {
"id": "5f9a1239-0bdc-4ad6-84e0-f685cfa836f9",
"timestamp": "2019-07-04T08:42:37.9830577+02:00"
},
"user": {
"username": "trt",
"passwordHash": "juju"
},
"terminal": {
"terminalId": "juju",
"site": {
"id": "juju"
}
}
}
数据类如下,还要注意的是我在我的数据类中包含了空构造函数:
data class AuthoriseReq(
@SerializedName("transaction") val transaction: Transaction,
@SerializedName("user") val user: User,
@SerializedName("terminal") val terminal: Terminal)
{
constructor() : this(Transaction(), User(), Terminal())
}
data class Terminal(
@SerializedName("terminalId") var terminalId: String,
@SerializedName("site") var site: Site)
{
constructor() : this("", Site())
}
data class Transaction(
@SerializedName("id") var id: String,
@SerializedName("timestamp") var timestamp:DateTime)
{
constructor(): this("", DateTime())
}
data class Site(
@SerializedName("id") var id: String)
{
constructor():this("")
}
data class User(
@SerializedName("username") var username: String ,
@SerializedName("passwordHash") var passwordHash : String )
{
constructor(): this("","")
}
但是,在尝试JSON解析时,我一直收到以下错误:
Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 74 path $.transaction.timestamp
分析解答
替换以下内容
@SerializedName("timestamp") var timestamp:DateTime)
同
@SerializedName("timestamp") var timestamp : String )
这应解决错误,因为"2019-07-04T08:42:37.9830577+02:00"
是所提供的JSON string中的String。