【发布时间】:2015-07-10 15:37:35
【问题描述】:
尝试在 scala 中使用 json4s 序列化 AnyVal 序列时遇到问题。
这是使用 FunSuite 进行的测试,重现了该问题:
import org.json4s._
import org.json4s.jackson.JsonMethods._
import org.json4s.jackson.Serialization._
import org.scalatest.{FunSuite, Matchers}
case class MyId(id: String) extends AnyVal
case class MyModel(ids: Seq[MyId])
class AnyValTest extends FunSuite with Matchers {
test("should serialize correctly") {
implicit val formats = DefaultFormats
val model = MyModel(Seq(MyId("1"), MyId("2")))
val text = write(model)
parse(text).extract[MyModel] shouldBe model
}
}
尝试从 JValue 中提取 MyModel 时测试失败,因为它无法为 ids 字段找到合适的值。
我注意到 AnyVal 在直接使用时工作正常,但与以下类似:
case class AnotherModel(id: MyId)
然后我就可以正确序列化和反序列化了。
【问题讨论】:
-
你觉得
case class MyId(id: String) extends AnyVal有什么意义吗?如果你想扩展一些行为,也许使用 Traits 会更好,你不这么认为吗?
标签: json scala serialization deserialization json4s