Json4s:不支持在方法体中定义的类

时间:2016-02-24 01:46:39

标签: scala json4s

我有Seq个:

case class IntPane(
                    override val duration: FiniteDuration,
                    override val values: mutable.Map[String, Int],
                    override val default: Int)
  extends BasePane[Int](duration, values, default)

我可以使用此格式化程序调用{​​{1}}来序列化它们:

writes()

但是,我想忽略一些字段,所以我添加以下几行:

implicit val formats: Formats = DefaultFormats +
    FieldSerializer[scala.collection.mutable.Map[String, Int]]() +

现在,序列化失败了这个神秘的例外:

org.json4s.package $ MappingException:不支持在方法体中定义的类。       在org.json4s.reflect.package $ .fail(package.scala:93)       at org.json4s.reflect.Reflector $ ClassDescriptorBuilder $$ anonfun $ createConstructorDescriptors $ 3 $$ anonfun $ 15.apply(Reflector.scala:139)       at org.json4s.reflect.Reflector $ ClassDescriptorBuilder $$ anonfun $ createConstructorDescriptors $ 3 $$ anonfun $ 15.apply(Reflector.scala:135)       在scala.collection.TraversableLike $$ anonfun $ map $ 1.apply(TraversableLike.scala:244)       在scala.collection.TraversableLike $$ anonfun $ map $ 1.apply(TraversableLike.scala:244)       在scala.collection.mutable.ResizableArray $ class.foreach(ResizableArray.scala:59)       在scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47)       在scala.collection.TraversableLike $ class.map(TraversableLike.scala:244)       在scala.collection.AbstractTraversable.map(Traversable.scala:105)       at org.json4s.reflect.Reflector $ ClassDescriptorBuilder $$ anonfun $ createConstructorDescriptors $ 3.apply(Reflector.scala:135)

2 个答案:

答案 0 :(得分:0)

我已快速尝试,以下似乎有效:

val intPaneFieldSerializer = FieldSerializer[IntPane](ignore("duration") orElse ignore("default"))

implicit val formats: Formats = DefaultFormats + FieldSerializer[scala.collection.mutable.Map[String, Int]]() + intPaneFieldSerializer

答案 1 :(得分:0)

不支持在方法主体中定义的类。

错误消息表明案例类IntPane是在方法内部定义的。

  def myMethod() {
    case class IntPane(...)
  }

如果将IntPane案例类定义移到方法之外,则可以解决此问题。

  case class IntPane(...)

  def myMethod() {
    ...
  }