在运行以下代码行尝试传递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。