0

I have a case class Person(name:String, id:Int) for serialization reasons (MessagePack), I need to convert this to a class. Is there an easy / elegant way to do this which does not require too much boilerplate or creation?

case class Person(name:String, id:Int) -> class Person(name:String, id:Int)

4

1 に答える 1

1

ケースクラスは、事実上通常のクラスであるため、「通常の」クラスとしてシリアル化できます。デフォルトですべてのコンストラクター引数にアクセスできるようになるため、通常のクラスよりもシリアル化に適しています。

ケース クラスは、いくつかのメソッドをequalsおよびhashCodeとしてクラスに自動的に追加するようにコンパイラに指示するだけです。同時にapplyメソッドが追加されたコンパニオン オブジェクトがありますが、これは通常のクラスにはまったく影響しません。

したがって、シリアライゼーションで問題が発生した場合、問題の原因が別の場所にある可能性が非常に高くなります。

json4s https://github.com/json4s/json4sを試して、ケース クラスを JSON に変換してから、それを MessagePack 形式に変換できます。

import org.json4s._
import org.json4s.native.Serialization
import org.json4s.native.Serialization.{read, write}
implicit val formats = Serialization.formats(ShortTypeHints(List(classOf[Person])
val jsonString : String = write(Person("Andi", 42))

// convert with MessagePack as you would do with normal JSON
于 2014-12-23T13:27:54.087 に答える