我有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)
答案 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() {
...
}