2016-09-10 11 views
0

はのは、私は次のモデルがあるとしましょう:オブジェクトのカスタムReactiveMongoリーダー&ライターを作成するには?

case class Game(var _id: Option[BSONObjectID] = None, 
        name: String, 
        genre: Genre.Kind, 
        var created: Option[DateTime] = None, 
        var updated: Option[DateTime] = None 
       ) 

私は次のようにGameのインスタンスを格納したい:Genreについては {"_id": "ObjectId(12345)", "name": "My Shooter Game", "genre": "Shooter", …}

私は文字列として値を格納したいのですが、プログラム的に私が欲しいです値ではなく型を扱う。

No unapply or unapplySeq function found

の場合:

implicit val genreJsonFormat = Json.format[Genre.Kind] 

任意のアイデア私が達成できるか

object Genre { 

    sealed trait Kind 

    implicit val genreJsonFormat = Json.format[Genre.Kind] 

    case object Shooter extends Kind { 
    val name = "Shooter" 

    override def toString = name 
    } 

    def getGenre(genre: String) = genre match { 
    case Shooter.name => Shooter 
    // ... 
    } 

    implicit object GenreWriter extends BSONDocumentWriter[Genre.Kind] { 
    def write(genre: Genre.Kind): BSONDocument = 
     BSONDocument("genre" -> genre.toString) 
    } 

    implicit object GenreReader extends BSONDocumentReader[Genre.Kind] { 
    def read(doc: BSONDocument): Genre.Kind = Genre.getGenre(doc.getAs[String]("genre").get) 
    } 

} 

は、残念ながら、私はこのコンパイルエラーを取得:だからここ

は、私が仕事だろうと思ったものですそれ?

答えて

0

Play JSONのマクロはまだ密封されたファミリをサポートしていないため、BSONハンドラの場合と同じように処理する必要があります。

+0

最初に[documentation](https://www.playframework.com/documentation/2.5.x/ScalaJson)を読むことをお勧めします – cchantep

+0

'Json.format'はReactiveMongoでは提供されていませんが、JSONを再生します – cchantep

関連する問題