Scala的哪个XML序列化库?

时间:2011-02-11 08:58:43

标签: xml serialization scala xml-serialization

我正在寻找scala的xml序列化库。 对于json序列化,我使用lift-json,并希望我的xml序列化库类似,这意味着:

  • 案例类的自动序列化(没有任何格式定义)
  • scala类型的智能序列化:集合,选项等。
  • 为其他数据类型定义格式以调整序列化方式的能力
  • 反序列化不是基于implicits而是基于类名(有时候我只有类型的类/类名,必须反序列化)

你知道这个图书馆是否存在吗?

2 个答案:

答案 0 :(得分:4)

尝试scalaxb

答案 1 :(得分:4)

一个很好的选择是使用纯Java库XStream

这适用于开箱即用的案例类,有一些调整 - 我正在使用来自XStreamConversions的类mixedbits-webframework - 它也适用于List,Tuple,Symbol,ListBuffer和ArrayBuffer。所以它并不完美,但你可以根据自己的特定需求进行微调 这是一个小例子。

    import com.thoughtworks.xstream.XStream
    import com.thoughtworks.xstream.io.xml.StaxDriver
    import net.mixedbits.tools.XStreamConversions

    case class Bar(a:String)
    case class Foo(a:String,b:Int,bar:Seq[Bar])

    object XStreamDemo {
      def main(args: Array[String]) {
            val xstream = XStreamConversions(new XStream(new StaxDriver()))
            xstream.alias("foo", classOf[Foo])
            xstream.alias("bar", classOf[Bar])
            val f0 = Foo("foo", 1, List(Bar("bar1"),Bar("bar2")))

            val xml = xstream.toXML(f0)
            println(xml)

            val f1 = xstream.fromXML(xml)
            println(f1)
            println(f1 == f0)
      }
    }

这会产生以下输出:

    <?xml version="1.0" ?><foo><a>foo</a><b>1</b><bar class="list"><bar><a>bar1</a></bar><bar><a>bar2</a></bar></bar></foo>
    Foo(foo,1,List(Bar(bar1), Bar(bar2)))
    true

对于Java 1.6 / Scala 2.9,依赖项是xstream.jar文件和提到的XStreamConversions类。