Ho un codice per convertire la stringa json in oggetti come i seguenti:
def apply(line: String): PairEvent = {
val (name, json) = line.span(_ != " ")
name match {
case "OpenTabEvent" => Serialization.read[OpenTabEvent](json)
case "CloseTabEvent" => Serialization.read[CloseTabEvent](json)
case "ChangeContentEvent" => Serialization.read[ChangeContentEvent](json)
case "ChangeMasterRequest" => Serialization.read[ChangeMasterRequest](json)
case "CreateFileEvent" => Serialization.read[CreateFileEvent](json)
case "DeleteFileEvent" => Serialization.read[DeleteFileEvent](json)
case "CreateDirEvent" => Serialization.read[CreateDirEvent](json)
case "DeleteDirEvent" => Serialization.read[DeleteDirEvent](json)
case "WatchingFiles" => Serialization.read[WatchingFiles](json)
case _ =>
ServerLogger.info("!!!!!!!!!!!!!!!!!!!!! unknown line from server: " + line)
???
}
}
Puoi vedere che ho codificato alcune stringhe e li uso come tipi da convertire in oggetti.
C'è un modo per fare lo stesso senza hardcode? Non sono sicuro che sia possibile, anche con la macro.
risposte:
0 per risposta № 1Potresti usare il nome della classe:
case OpenTabEvent.getClass.getSimpleName => Serialization.read[OpenTabEvent](json)