我正在尋找scala的xml序列化庫。 對JSON序列化我用電梯,JSON,並希望我的XML序列化庫是相似的,這意味着:Scala的哪個XML序列化庫?
- case類(不帶任何格式定義)
- 斯卡拉類型的智能序列化自動序列:集合,選項等
- 爲其他數據類型定義格式以調整它們被序列化的方式的能力
- 反序列化不是基於implicits而是基於類名(有時候我只有類/類名,它必須被反序列化)
你知道這樣的圖書館是否存在?
我正在尋找scala的xml序列化庫。 對JSON序列化我用電梯,JSON,並希望我的XML序列化庫是相似的,這意味着:Scala的哪個XML序列化庫?
你知道這樣的圖書館是否存在?
嘗試scalaxb
一個偉大的選擇是使用純Java庫XStream。
這適用於開箱即用的案例類,並進行了一些調整 - 我使用mixedbits-webframework的XStreamConversions類,它也適用於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/2.9的Scala的依賴關係是xstream.jar文件和提及XStreamConversions類。
這種方法的壞處是缺少對'Option []`的處理 – expert 2013-05-19 03:50:21
Scalaxb將xsd文件轉換爲scala類。但我有scala課程,想要序列化它們。 – 2011-02-11 11:37:39