扩展Seq-Trait的案例类的序列化

时间:2013-07-10 07:34:45

标签: json scala json4s

当我尝试序列化从Seq扩展的case类时,它看起来像seq一样被handeled而且所有其他字段都被省略了。

序列化只会导致标准序列而没有其他字段。而反序列化失败了。

有谁知道我在这里做错了什么?

代码:

// 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 

1 个答案:

答案 0 :(得分:0)

不讨论为什么这样的类有用......你会如何手动编码这样的对象?

在JSON中,您可以使用词典和列表,因此您不能指望列表具有额外的命名属性。

您可以让IntSeq类具有列表属性,而不是自己扩展Seq(并且可能提供自动转换),因此您的JSON可能如下所示:

{'length' : 5, 'ints' : [1, 2, 3, 4, 5]}