无法使用 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 库中有一个编译时反射。
我正在使用 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 库中有一个编译时反射。