0

我有一个从我的案例类继承的基类,当我使用常规 Json.writes 时,它似乎不包括继承的字段。

implicit val userResponseWrites = Json.writes[UserRespopnse]

case class UserResponse(var userId: Int, var name: String) extends BaseResponse

abstract class BaseResponse(var success: Boolean = false, var message: String = "")

然后 json 响应不包括来自 BaseResponse 类的成功和消息字段。

这有可能工作还是我必须手动写出我的写入格式化程序?

4

1 回答 1

1

JSONreadswrites宏分别使用案例类的applyunapply方法。他们不只是简单地读写班级的所有成员。通过继承,你的类基本上看起来像这样:

case class UserResponse(var userId: Int, var name: String) {
   var success: Boolean = false
   var message: String = ""
}

只有userIdandname成员会被宏拾取。解决这个问题并仍然使用宏的一种(一种丑陋的)方法是从抽象类中删除 getter/setter,并让案例类定义它们:

abstract class BaseResponse(success: Boolean, message: String)
case class UserResponse(var userId: Int, var name: String, var success: Boolean = false, var message: String = "") 
    extends BaseResponse(success, message)

我看到的唯一其他选择是Writes为每个类手动定义。

也就是说,可能有比使用 vars 更好的方法来完成所有这些,尽管如果没有更多上下文很难判断是什么。

于 2014-11-24T02:55:06.633 回答