使用JSON4S在Scala中对案例对象进行反序列化

我定义了一些案例类,如下所示:

sealed trait Breed

case object Beagle extends Breed

case object Mastiff extends Breed

case object Yorkie extends Breed

case class Dog(name: String, breed: Breed)

我也有一个用Scalatra定义的端点:

post("/dog") {

val dog = parsedBody.extract[Dog]

...

}

我想要这个JSON对象:

{

name: "Spike",

breed: "Mastiff"

}

反序列化为的适当实例Dog。我正在努力弄清楚如何为其编写自定义反序列化器Breed并将其注册到JSON4S。

回答:

您需要编写如下的序列化器:

case object BreedSerializer extends CustomSerializer[Breed](format => (

{

case JString(breed) => breed match {

case "Beagle" => Beagle

case "Mastiff" => Mastiff

case "Yorkie" => Yorkie

}

case JNull => null

},

{

case breed:Breed => JString(breed.getClass.getSimpleName.replace("$",""))

}))

现在,您将不得不将此序列化器添加为默认格式。

import org.json4s.CustomSerializer

val serializers = List(BreedSerializer)

implicit lazy val serializerFormats: Formats = DefaultFormats ++ serializers

希望这能解决您的问题。

以上是 使用JSON4S在Scala中对案例对象进行反序列化 的全部内容, 来源链接: utcz.com/qa/407229.html

回到顶部