2011-02-11 3 views
1

scala 용 xml 직렬화 라이브러리를 찾고 있습니다. JSON 직렬화를 들어 내가 리프트 JSON을 사용하고 내 XML 직렬화 라이브러리와 유사 싶습니다, 그 의미스칼라 용 XML 직렬화 라이브러리는 무엇입니까?

    (모든 형식 정의가없는) 경우 클래스 스칼라 유형의
  • 스마트 직렬화의
  • 자동으로 직렬화 : 컬렉션 등 옵션
  • 능력은 가끔 난 단지 클래스/유형의 클래스 이름이 직렬화해야 한하는 (implicits에 오히려 클래스 이름을 기반으로
  • 직렬화하지 직렬화하는 방법을 조정하기 위해 다른 데이터 유형에 대한 형식을 정의)

그러한 라이브러리가 있는지 알고 있습니까?

답변

4

scalaxb

+3

Scalaxb는 scala 클래스에 xsd 파일을 포함합니다. 하지만 저는 스칼라 클래스를 가지고 있고 그것을 직렬화하고 싶습니다. –

4

하나 개의 훌륭한 대안이 순수 자바 라이브러리 XStream을 사용하는 것입니다보십시오.

일부 조정할 수있는 케이스 클래스와 함께 작동합니다. 의 클래스 XStreamConversions을 사용하고 있으며 List, Tuple, Symbol, ListBuffer 및 ArrayBuffer에서도 작동합니다. 따라서 완벽하지는 않지만 특정 요구에 맞게 조정할 수는 있습니다.
다음은 작은 예입니다.

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

자바 1.6/스칼라 2.9 종속성이 xstream.jar 파일과 언급 XStreamConversions 클래스입니다

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) 
     } 
    } 

이 다음과 같은 출력을 생성합니다.

+1

이 방법에 대한 나쁜 점은'Option []' – expert

관련 문제