Возможна ли красивая сериализация XStream со Scala? - PullRequest
3 голосов
/ 18 ноября 2009

Я пробую XStream как способ быстрой сериализации объектов в Xml или JSON для отправки по проводам и десериализации. Я хочу, чтобы XML / JSON был простым / чистым.

Кажется, это работает хорошо, я добавил несколько псевдонимов, но теперь я столкнулся с проблемой, этот код:

println(new XStream.toXML(List(1,2,3)))

производит этот XML:

<scala.coloncolon serialization="custom">
  <unserializable-parents/>
  <scala.coloncolon>
    <int>1</int>
    <int>2</int>
    <int>3</int>
    <scala.ListSerializeEnd/>
  </scala.coloncolon>
</scala.coloncolon>

Я думаю , что происходит, так это то, что класс Scala List имеет свою собственную настраиваемую сериализацию ... Интересно, есть ли способ переопределить это? Я бы предпочел получить:

<list>
  <int>1</int>
  <int>2</int>
  <int>3</int>
</list>

Ответы [ 2 ]

1 голос
/ 18 ноября 2009

Я понял, как написать конвертер для списка Scala, чтобы получить xml, как показано выше, см .:

Как мне заставить XStream красиво выводить списки Scala? Могу ли я написать собственный конвертер?

1 голос
/ 18 ноября 2009

Класс "coloncolon", или ::, который на самом деле называется cons, является подклассом List в Scala. Он используется для хранения фактических элементов List. Единственный другой подкласс List - это класс объекта-одиночки Nil, который представляет пустой список.

Это на самом деле делает разумную работу по его сериализации, хотя и хранит имя подкласса - возможно, это проблема, когда вы десериализуете его.

Интересно, как он сериализуется Nil.

...