簡體   English   中英

無法使用 gson 將 json 反序列化為案例 class

[英]Not able to deserialize json to case class using gson

我正在使用 Scala 編程語言並希望將 json 反序列化為大小寫 class

我的案例 class 看起來像這樣

case class Events
(
  Name: String,
  Field1: Option[Seq[String]],
  Field2: Option[Seq[String]],
  Field3: Option[Seq[String]]
)

case class RootInterface
(
  Events: Seq[Events]
)

json 看起來像這樣

"Events": [
    {
      "Name": "event1",
      "Field1": ["f1"]
    },
    {
      "Name": "event2",
      "Field1": ["f1","f2"]
    }
  ]

我必須這樣做的代碼是

val gson = new Gson

gson.fromJson(json, classOf[RootInterface])

當我嘗試這樣做時,我收到以下錯誤

java.lang.RuntimeException:無法為 scala.collection.Seq<***.Events> 調用無參數構造函數。 向 Gson 注冊一個 InstanceCreator 可以解決這個問題。

我可以解決這個問題嗎?

您將無法使用 Java 庫來期待 Java 具有標准案例類的 Bean

  • 你沒有 no-artgs 構造函數(你必須創建一個默認構造函數)
  • 你只有二傳手(你沒有使用var s)
  • 並且訪問器不使用 Bean 語法(您必須使用@BeanProperty

所以你必須使用類似的東西:

case class Events(
  @BeanProperty var name: String,
  @BeanProperty var field1: Option[Seq[String]],
  @BeanProperty var field2: Option[Seq[String]],
  @BeanProperty var field3: Option[Seq[String]]
) {

  def this() = this("", None, None, None)
}

但這意味着庫使用運行時反射,這會在總線下拋出類型安全。 就個人而言,我認為沒有理由使用 Java JSON 庫,只要您有選擇,因為我在 Scala 庫中有編譯時反射。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM