Java 无法使用gson将json反序列化到case类
我在Scala编程语言中工作,希望将json反序列化到case类 我的案例课是这样的Java 无法使用gson将json反序列化到case类,java,json,scala,gson,deserialization,Java,Json,Scala,Gson,Deserialization,我在Scala编程语言中工作,希望将json反序列化到case类 我的案例课是这样的 case class Events ( Name: String, Field1: Option[Seq[String]], Field2: Option[Seq[String]], Field3: Option[Seq[String]] ) case class RootInterface ( Events: Seq[Events] ) "Events": [ {
case class Events
(
Name: String,
Field1: Option[Seq[String]],
Field2: Option[Seq[String]],
Field3: Option[Seq[String]]
)
case class RootInterface
(
Events: Seq[Events]
)
"Events": [
{
"Name": "event1",
"Field1": ["f1"]
},
{
"Name": "event2",
"Field1": ["f1","f2"]
}
]
json看起来像这样
case class Events
(
Name: String,
Field1: Option[Seq[String]],
Field2: Option[Seq[String]],
Field3: Option[Seq[String]]
)
case class RootInterface
(
Events: Seq[Events]
)
"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调用无参数构造函数。为此类型向Gson注册InstanceCreator可能会解决此问题
我该怎么解决这个问题呢?您将无法向我们推荐希望Java Bean具有标准case类的Java库
- 您没有artgs构造函数(必须创建默认构造函数)
- 您只有setter(您没有使用
s)var
- 而且访问器不使用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库中有编译时反射。为什么使用Java库而不是Scala库?很抱歉,我没有得到它。我在哪里使用java库?Gson是一个java库,它是为java程序设计的,它不知道如何处理Scala案例类。谢谢大家,我最后使用了一个Scala库