Scala 的哪个 XML 序列化库? [英] Which XML serialization library for Scala?
问题描述
我正在寻找 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屋!