尝试json序列化祖父Trait中的'val'或'lazy val'元组字段时使用json4s在scala中运行时异常

时间:2017-11-09 12:54:35

标签: scala json4s

我在序列化一个案例类时遇到了一个运行时异常,该案例类扩展了一个特征,后者又扩展了另一个祖父母特征。

只有当祖父母特征包含val或lazy val(这是一个元组)时才会出现问题。

trait Trait0 {
  def a: Int

  lazy val b: (Int, Int) = (1, 2)
  // also errors if "val"
  // executes if "def" or just a simple type
}

trait Trait1 extends Trait0

case class Test(a: Int) extends Trait1

object Main {

  def main(args: Array[String]): Unit = {
    import org.json4s._
    import org.json4s.native.Serialization.write

    implicit val formats = DefaultFormats


    println(write(Test(1)))
  }
}

我得到的RunTime异常是

  

线程“main”中的异常org.json4s.package $ MappingException:不能   从类com.adobe.formfactory.generator.Test中找到字段b   org.json4s.reflect.package $ .fail(package.scala:95)at   org.json4s.reflect.ScalaSigReader $ .read $ 1(ScalaSigReader.scala:43)at at   。org.json4s.reflect.ScalaSigReader $ $ $ anonfun $ readField 3(ScalaSigReader.scala:47)     在scala.Option.getOrElse(Option.scala:121)at   org.json4s.reflect.ScalaSigReader $ .read $ 1(ScalaSigReader.scala:47)at at   org.json4s.reflect.ScalaSigReader $ .readField(ScalaSigReader.scala:49)     在   org.json4s.reflect.Reflector $ ClassDescriptorBuilder $ anonfun $ $域3(Reflector.scala:69)。     在   。scala.collection.TraversableLike $ anonfun $地图$ 1(TraversableLike.scala:234)     在   scala.collection.mutable.ResizableArray.foreach(ResizableArray.scala:59)     在   scala.collection.mutable.ResizableArray.foreach $(ResizableArray.scala:52)     在scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)     在scala.collection.TraversableLike.map(TraversableLike.scala:234)     在scala.collection.TraversableLike.map $(TraversableLike.scala:227)     在scala.collection.AbstractTraversable.map(Traversable.scala:104)     在   org.json4s.reflect.Reflector $ ClassDescriptorBuilder.fields(Reflector.scala:68)     在   org.json4s.reflect.Reflector $ ClassDescriptorBuilder.properties(Reflector.scala:85)     在   org.json4s.reflect.Reflector $ ClassDescriptorBuilder.result(Reflector.scala:184)     在org.json4s.reflect.Reflector $ .createDescriptor(Reflector.scala:53)     在   。$ $ org.json4s.reflect.Reflector $ anonfun描述$ 1(Reflector.scala:48)     在org.json4s.reflect.package $ Memo.apply(package.scala:36)at   org.json4s.reflect.Reflector $ .describe(Reflector.scala:48)at   org.json4s.Extraction $ .decomposeObject $ 1(Extraction.scala:118)at   org.json4s.Extraction $ .internalDecomposeWithBuilder(Extraction.scala:228)     在org.json4s.Extraction $ .decomposeWithBuilder(Extraction.scala:64)     在org.json4s.native.Serialization $ .write(Serialization.scala:43)at   org.json4s.native.Serialization $ .write(Serialization.scala:37)at   com.adobe.formfactory.generator.Main $ .main(Main.scala:31)at   com.adobe.formfactory.generator.Main.main(Main.scala)

Scala2.12.3
JDK1.8
json4s-native 3.5.3

我猜json4s不会遍历元组或其他复合对象的超级链?

如果是提供自定义序列化程序的情况,那么错误就会提到某些类型无法序列化。

1 个答案:

答案 0 :(得分:0)

我想这是自v3.4以来的现有错误

https://github.com/json4s/json4s/issues/221