Scala 的哪个 XML 序列化库? [英] Which XML serialization library for Scala?

查看:35
本文介绍了Scala 的哪个 XML 序列化库?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm looking for xml serialization library for scala. For json serialization I use lift-json, and would like my xml serialization library to be similar, that means:

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

你知道这样的库是否存在吗?

Do you know if such library exists?

推荐答案

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

One great alternative is to use the pure Java library XStream.

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

This works with case classes out of the box, with some tweaking - I'm using the class XStreamConversions from mixedbits-webframework -, it also works with List, Tuple, Symbol, ListBuffer and ArrayBuffer. So it's not perfect, but you can surely fine tune it for your specific needs.
Here is a small example.

    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 类.

For Java 1.6 / Scala 2.9 the dependencies are the xstream.jar file and the mentioned XStreamConversions class.

这篇关于Scala 的哪个 XML 序列化库?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆