spray-Json 序列化接口类型
Spray-Json serialize interface type
使用 spray-json 如何序列化以下 class
case class Vegetable(name: String, color: String, seller:ISeller)
这里ISeller是一个Java接口。我是 spray-json 的新手,不确定如何序列化和反序列化。
我试过了,但它给出了运行时错误
implicit val VegetableFormat = jsonFormat3(Vegetable)
这里的任何指针都会很棒。
您需要为您的 ISeller 对象定义一种转换 to/from JSON 的方法。
除了您提供的代码之外,您还需要为 ISeller 定义格式化程序,如下所示:
implicit object ISellerJsonFormat extends RootJsonFormat[ISeller] {
def write(c: ISeller) = JsNull
def read(value: JsValue) = null
}
上面的代码片段忽略了 ISeller,所以 vegetable.toJson 会产生:
{"name":"Onion","color":"red","seller":null}
如果你想要read/write更有意义的东西,你可以实现更复杂的逻辑。请参阅 https://github.com/spray/spray-json 中的 "Providing JsonFormats for other Types" 部分。
使用 spray-json 如何序列化以下 class
case class Vegetable(name: String, color: String, seller:ISeller)
这里ISeller是一个Java接口。我是 spray-json 的新手,不确定如何序列化和反序列化。
我试过了,但它给出了运行时错误
implicit val VegetableFormat = jsonFormat3(Vegetable)
这里的任何指针都会很棒。
您需要为您的 ISeller 对象定义一种转换 to/from JSON 的方法。 除了您提供的代码之外,您还需要为 ISeller 定义格式化程序,如下所示:
implicit object ISellerJsonFormat extends RootJsonFormat[ISeller] {
def write(c: ISeller) = JsNull
def read(value: JsValue) = null
}
上面的代码片段忽略了 ISeller,所以 vegetable.toJson 会产生:
{"name":"Onion","color":"red","seller":null}
如果你想要read/write更有意义的东西,你可以实现更复杂的逻辑。请参阅 https://github.com/spray/spray-json 中的 "Providing JsonFormats for other Types" 部分。