1

Seq から拡張されたケース クラスをシリアル化しようとすると、Seq として処理され、すべての追加フィールドが省略されるようです。

シリアル化は、追加フィールドのない標準シーケンスにつながるだけです。一方、逆シリアル化は失敗します。

ここで私が間違っていることを誰かが知っていますか?

コード:

// Definition of class
case class IntSeq(count: Int, ints: Seq[Int]) extends Seq[Int] {
    def length: Int = ints.length
    def iterator: Iterator[Int] = ints.iterator
    def apply(idx: Int) = ints(idx)
}
// type Hints
implicit val hints = Serialization.formats( ShortTypeHints(List(classOf[IntSeq])) )

lazy val testIntSeq = IntSeq(5, List(1,2,3,4,5))

val ser = Serialization.write[IntSeq](testIntSeq)
// ser: String = [1,2,3,4,5]

Serialization.read[IntSeq](ser) // Hurray: org.json4s.package$MappingException: unknown error 
4

1 に答える 1

0

なぜそのようなクラスが有用なのかを議論せずに...そのようなオブジェクトを手動でどのようにエンコードしますか?

JSON では、辞書とリストを使用できるため、リストに追加の名前付き属性があるとは期待できません。

IntSeqクラスに list 属性を持たせ、それ自体を拡張しないようにすることができますSeq(おそらく自動変換を提供します)。そのため、JSON は次のようになります。

{'length' : 5, 'ints' : [1, 2, 3, 4, 5]}
于 2013-07-10T09:34:44.417 に答える