正在用数据 类 解析 JSON 字符串

Parsing JSON String with data classes

在 运行 之后,以下代码行试图传递 JSON 字符串:

        var test = String(tempstore, Charset.forName("US-ASCII"))

        var gson = Gson()
        var testmodel = gson.fromJson(test, AuthoriseReq::class.java)

JSON字符串如下:

{
  "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"
    }
  }
}   

数据class如下,还要注意的是我在数据中包含了空构造函数classes:

 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 字符串中的一个字符串。