无法使用 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 构造函数(您必须创建默认构造函数)
  • 你只有二传手(你没有使用 vars)
  • 并且访问器不使用 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 库中有一个编译时反射。