out*_*344 3 serialization scala lift class-hierarchy
我有一个如下的层次结构:
case class A(val a: Long, val b: String)
case class B(val c: String) extends A(a=3, b="a string")
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用lift-json序列化它以下:
val obj = B(c="another string")
val cameraJson = net.liftweb.json.Serialization.write(obj)
Run Code Online (Sandbox Code Playgroud)
但我所看到的是它只序列化了B类中的属性而不是A中的属性.
我也尝试过:
compact(render(decompose(obj)))
Run Code Online (Sandbox Code Playgroud)
结果相同
是什么赋予了?Scala中有一些我不知道的东西吗?
case类继承是Scala的弃用功能.这应该适用于例如:
trait A { val a: Long; val b: String }
case class B(a: Long = 3, b: String = "a string", c: String) extends A
val obj = B(c="another string")
var ser = Serialization.write(obj)
Serialization.read[B](ser)
Run Code Online (Sandbox Code Playgroud)
案例类的经典提升JSON序列化基于构造函数参数列表(请参阅分解实现),而不是类属性.因此,您必须覆盖父特征中声明的所有字段(如@Joni答案中所示)或使用组合而不是继承.
例如:
case class A(a: Long, b: String)
case class B(c: String, a: A = A(a=3, b="a string"))
B(c="another string")
Run Code Online (Sandbox Code Playgroud)
val案例类构造函数中的BTW 关键字是不必要的.每个构造函数arg的访问器是通过将类声明为案例而免费获得的东西之一.
| 归档时间: |
|
| 查看次数: |
1616 次 |
| 最近记录: |