使用JSON4S在Scala中对案例对象进行反序列化
我定义了一些案例类,如下所示:
sealed trait Breedcase 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.CustomSerializerval serializers = List(BreedSerializer)
implicit lazy val serializerFormats: Formats = DefaultFormats ++ serializers
希望这能解决您的问题。
以上是 使用JSON4S在Scala中对案例对象进行反序列化 的全部内容, 来源链接: utcz.com/qa/407229.html