Custom type serialization
So far, we have only tried to serialize and deserialize simple types. What if we wanted to decode the language field in the repository array to an enumeration rather than a string? We might, for instance, define the following enumeration:
scala> object Language extends Enumeration { val Scala, Java, JavaScript = Value } defined object Language
Casbah lets us define custom serializers tied to a specific Scala type: we can inform Casbah that whenever it encounters an instance of the Language.Value
type in a DBObject
, the instance should be passed through a custom transformer that will convert it to, for instance, a string, before writing it to the database.
To define a custom serializer, we need to define a class that extends the Transformer
trait. This trait exposes a single method, transform(o:AnyRef):AnyRef
. Let's define a LanguageTransformer
trait that transforms from Language.Value
to String
:
scala> import org.bson.{BSON, Transformer} import org.bson...