Json 为什么我的case类将$classname保存到mongodb中?
我有一个案例类和这样的特点Json 为什么我的case类将$classname保存到mongodb中?,json,mongodb,scala,Json,Mongodb,Scala,我有一个案例类和这样的特点 trait A { val _id: Option[A] = None val d: Option[List[D]] = None val id: Option[String] = None } object A { def apply(className: String): Element = Class.forName(className: String).asInstanceOf[A] def unapply(element:
trait A {
val _id: Option[A] = None
val d: Option[List[D]] = None
val id: Option[String] = None
}
object A {
def apply(className: String): Element = Class.forName(className: String).asInstanceOf[A]
def unapply(element: A): Option[String] = Option(this.getClass.getName)
}
case class B extends A (
value1: String, value2: A, sub: Option[TypeY] = None
)
object B {
import play.api.libs.functional.syntax._
implicit val AFormatter: Format[A] = Json.format[A]
implicit val BFormatter: Format[B] = Json.format[B]
implicit val Breads:Reads[B] = Json.reads[B]
implicit val BWrites = Json.writes[B]
}
插入与案例类别B相对应的数据时,值2保存为“$a”:“abc.xyz.data”,其中“a”是特征名称,“abc.xyz.data”是包名称。这是因为我的应用和取消应用方法吗?如何解决这个问题
编辑:数据库保存代码
我正在使用ReactiveMongo库将数据保存到DB
def collB : JSONCollection = db.collection[JSONCollection]("B")
def indbNewB(b: B) = {
collB.insert(B)
}
我认为您没有正确地将case类
A
序列化为JSON/string
如果您可以发布更多详细信息(例如实际将数据存储到数据库的代码),我将更新我的答案。您使用的是哪个库?你已经尝试了什么?我认为问题在于你试图序列化一个特征。无论
value2
的值是什么,序列化程序必须处理的所有信息都是它的类型A
@pedrofurla:如果我不添加json序列化/反序列化,那么我会得到“trait A没有应用,未应用实现”错误。您需要另一种设计或编写自己的手写格式化程序。这一点都不难。这个特质的手写格式化程序?