首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >json类型json的scala读写格式

json类型json的scala读写格式
EN

Stack Overflow用户
提问于 2014-03-10 09:03:12
回答 1查看 680关注 0票数 0

我在理解如何序列化类型时遇到了问题。

让我们说,我习惯于以这种方式序列化:

类:

代码语言:javascript
复制
case class LocalizedItem(itemId:String, var value:String)
{
    def this(itemId:Option[String]) = this(itemId.getOrElse(null), "")
    def this(itemId:String) = this(itemId, "")
}

在我的格式中我是这样做的:

代码语言:javascript
复制
trait ProductFormats extends ErrorFormats {

  implicit val localizedItemFormat = new Format[LocalizedItem]{
def writes(item: LocalizedItem):JsValue = {
  Json.obj(
      "itemId" -> item.itemId,
      "value" -> item.value
      )
}
def reads(json: JsValue): JsResult[LocalizedItem] = 
JsSuccess(new LocalizedItem(
    (json \ "itemId").as[String],
    (json \ "value").as[String]
    ))
    }

我的问题是,如何对接收泛型项/类型的对象使用相同的模式(泛型将以LocalizedItem的方式实现写入/读取)

例如:

代码语言:javascript
复制
case class DTOResponse[T](d: T) {
  def isError = false
  def get() = d }

当试图以这种方式实现时:

代码语言:javascript
复制
implicit val dtoResponseFormat = new Format[DTOResponse] {
 def writes(item: DTORespons):JsValue = {
  Json.obj(
      "itemId" -> item.itemId,
      "value" -> item.value
      ) }

我收到错误:

代码语言:javascript
复制
class DTOResponse takes type parameters  
EN

回答 1

Stack Overflow用户

发布于 2014-03-10 09:36:59

与…有关的东西:

代码语言:javascript
复制
implicit def dtoResponseFormat[T: Format] = new Format[DTOResponse[T]] {
 val tFormatter: Format[T] = implicitly[Format[T]]
 def writes(item: DTOResponse):JsValue = {
  Json.obj(
    "itemId" -> tFormatter.writes(item.get())
  ) 
 }
}

这里的假设是,您也需要格式化T类型的值。如果没有,则可以删除类型约束。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22295856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档