Какая библиотека XML-сериализации для Scala? - PullRequest
1 голос
/ 11 февраля 2011

Я ищу библиотеку сериализации xml для scala.Для сериализации json я использую lift-json и хотел бы, чтобы моя библиотека сериализации xml была похожа, что означает:

  • автоматическая сериализация классов дел (без определения формата)
  • smartсериализация типов scala: коллекции, опции и т. д.
  • возможность определять форматы для других типов данных для настройки способа их сериализации
  • десериализация не на основе последствий, а скорее на имени класса (иногда я имеютолько имя класса / класса, которое должно быть десериализовано)

Знаете ли вы, существует ли такая библиотека?

Ответы [ 2 ]

4 голосов
/ 15 марта 2012

Одной из отличных альтернатив является использование чистой библиотеки Java XStream .

Это работает с классами дел из коробки, с некоторыми изменениями - я использую класс XStreamConversions из mixedbits-webframework -, это также работает с List, Tuple Символ, 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.

4 голосов
/ 11 февраля 2011

Попробуйте scalaxb

...